Dr.*_*cky 1 static android android-lifecycle android-activity
我有两项活动 A 和 B。
public class A extends Activity
{
....
@Override
protected void onResume()
{
super.onResume();
if(MyStaticVarz.myFlag)
{
MyStaticVarz.myFlag= false;
SomeTask();
}
}
Run Code Online (Sandbox Code Playgroud)
MyStaticVarz.java:
public class MyStaticVarz
{
public static boolean myFLag = false;
}
Run Code Online (Sandbox Code Playgroud)
从 A 转到 B 并将 myFlag 更改为 true,如下所示:
MyStaticVarz.myFlag = true;
Run Code Online (Sandbox Code Playgroud)
并再次返回 A,但在 onResume 中 if(MyStaticVarz.myFlag) 为 false 并且未到达 SomeTask()。
从A到B就像:
Intent i = new Intent(A.this, B.class);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
更新 SomeTask() 用于更改 A 和 B 中文本的字体大小。
myFlag 用于按需重新初始化 UI,如果字体设置发生更改,则运行 SomeTask()。
当单击 B 中的选项菜单并更改字体大小,然后转到 B 时,我看到更改,但当返回 A 时,文本字体大小没有发生。
也许重要的是:当我回到 A 并且字体大小不正确并且 myFlag 也为 false 时,如果我更改方向,文本字体大小可以,但 myFlag 再次为 false!
如果您从不同的线程访问“myFlag”变量,每个线程都可能有一个本地存储的副本,因此不同的线程可能不会立即看到变量值的更改。
将变量定义为 volatile 以强制所有线程看到相同的副本:
public static volatile boolean myFLag = false;
Run Code Online (Sandbox Code Playgroud)
请参阅这个很好的答案以获得更详细的解释