android - 静态变量在两个 Activity 之间不起作用

标签 android android-activity static android-lifecycle

我有两个 Activity A 和 B。

public class A extends Activity 
{
....
@Override
    protected void onResume()
    {
    super.onResume();
    if(MyStaticVarz.myFlag)
    {
                    MyStaticVarz.myFlag= false;
        SomeTask();
    }

}

MyStaticVarz.java :

public class MyStaticVarz
{
    public static boolean myFLag = false;
}

从 A 到 B 并将 myFlag 更改为 true,例如:

MyStaticVarz.myFlag = true;

然后再次返回到 A,但是在 onResume if(MyStaticVarz.myFlag) 为 false 且 SomeTask() 未达到。

从 A 到 B 就像:

Intent i = new Intent(A.this, B.class);
startActivity(i);

更新 SomeTask() 用于更改 A 和 B 中文本的字体大小。

myFlag 用于按需重新初始化 UI,如果字体设置更改,则运行 SomeTask()。

当单击 B 中的选项菜单并更改字体大小并转到 B 时,我看到更改,但是当返回 A 时,文本字体大小没有发生。

可能重要:当我回到 A 并且字体大小不正确并且 myFlag 也为 false 时,如果我更改方向,文本字体大小正常但 myFlag 再次为 false!

最佳答案

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

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

public static volatile boolean myFLag = false;

参见 this nice answer更详细的解释

关于android - 静态变量在两个 Activity 之间不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13329476/

相关文章:

c# - 在 C# 中是否有等效于 C 的静态?

c++ - 是否为地址从未使用过的静态常量变量分配了内存?

java - 在Android中如何在对话框中设置图像?

android - 使用 AnimationSet 在 Activity 之间转换动画

android - 在 Android 偏好设置中设置应用程序语言

java - 在运行时覆盖资源

android - 从广播接收器完成一个 Activity

php - 如何统计静态页面的浏览量?

android - 可以举报或删除来自 Android Play 的评论吗?

Android Studio构建NDK错误