静态变量在两个活动之间不起作用

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!

Twi*_*ite 5

如果您从不同的线程访问“myFlag”变量,每个线程都可能有一个本地存储的副本,因此不同的线程可能不会立即看到变量值的更改。

将变量定义为 volatile 以强制所有线程看到相同的副本:

public static volatile boolean myFLag = false;
Run Code Online (Sandbox Code Playgroud)

请参阅这个很好的答案以获得更详细的解释