1

我有两个活动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);

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

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

当点击 B 中的 optionMenu 并更改字体大小并转到 B 时,我看到了更改,但是当返回 A 时,文本字体大小不会发生。

也许重要:当我回到 A 并且字体大小不正确并且 myFlag 也为假时,如果我改变方向,文本字体大小是好的,但 myFlag 再次为假!

4

4 回答 4

4

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

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

public static volatile boolean myFLag = false;

有关更详细的解释,请参阅这个不错的答案

于 2012-11-11T08:09:39.797 回答
2

因为您正在从 2 个线程访问代码中的单个静态变量,所以您需要围绕该访问添加一些锁定。

我会看类似的东西:

public class MasterBB extends Activity 
{
  private final ReentrantLock lock = new ReentrantLock();

  @Override
  protected void onResume() {
    super.onResume();
    lock.lock();
    try {
        if(MyStaticVarz.myFlag) {
            MyStaticVarz.myFlag= false;
            SomeTask();
        }
    }
    finally {
        lock.unlock();
    }
  }
}

恐怕我的 Java 有点生疏了,可能还有更新的方法,但这是一般的想法。您需要确保 myFlag 在该代码块运行时没有机会被修改。

于 2012-11-11T09:24:01.750 回答
0

Your answer is simple, when you change MyStaticVarz.myFlag to true in getView, then you back to activity B, in onResume() the value of MyStaticVarz.myFlag change from true to false and when you back to activity A , the value of MyStaticVarz.myFlag is false not true and is obvious that activity A never get true value.

To solve this problem you must save changed value :

String value = entryValues[index].toString();

to static String in MyStaticVarz and in activity A and B onResume() event check the static String with local String to understand change.

于 2012-11-11T09:38:41.217 回答
0

false成员的初始值吗?也许您的应用程序的变量在此过程中被重置。如果我没记错 Android,onResume 可以作为应用程序终止的一部分调用,我几乎可以肯定这会破坏你所有的非存储数据。您需要将该信息存储在一个 Bundle 中并从中恢复。

于 2012-11-11T07:54:32.150 回答