我有一个活动,我在其中初始化一些静态变量(应用程序的菜单)。在另一个活动中,我在一些if子句中使用这些变量。
如果我在第二个活动中并按“主页”按钮将应用程序移至后台并在几分钟后恢复或立即应用仍然有效。如果我等了大约10分钟再恢复它就会崩溃。
我使用的智能手机有许多小部件和应用程序,它们会自动刷新。因此,我认为变量已从内存中删除,因为它已满。如果我恢复,应用程序将崩溃,我只使用if子句,如:
if(couldBeTrue){
//do something
}
我无法想到可能导致这个问题的另一个想法。
你认为我的假设是正确的吗?调试它的最佳方法是什么?
编辑: 对于糟糕的信息我很抱歉。我再试一次。
我有3个班级:
OpenFeintApp扩展应用程序: 每次我启动或恢复应用程序时启动(仅包含变量和OpenFeint的一些代码)
MenuActivity扩展活动: 此活动是启动器活动。包含所需的静态变量。这些变量用于设置。还有一些最终的静态变量,我将其更改为能够轻松导出不同的版本。
public final static boolean EXTRA_CONTENT_ONE = false;
public final static boolean EXTRA_CONTENT_TWO = true;
public final static boolean EXTRA_CONTENT_THREE = false;
public static int SETTINGS_ONE = 3;
public static int SETTINGS_TWO = 0;
public static int SETTINGS_THREE = 1;
public static int SETTINGS_FOR = 5;
(如果我在玩GameActivity时暂停应用程序后恢复应用程序,则不会被调用)
GameActivity扩展了Activity(AdMob集成): 如果我在几分钟后恢复,恢复后不会崩溃。 (Galaxy S,自动刷新很多东西)如果我暂停这个活动并在大约10分钟后恢复它会崩溃。在此活动恢复之前,将调用OpenFeintApp。
此时我收到了NullPointerException:
if (MenuActivity.EXTRA_CONTENT_ONE) //This variable is false
答案 0 :(得分:1)
重新表达你的假设:我认为使用另一个活动的静态数据是不安全的,并且期望在我的其他活动存在的任何时候它都会存在。这绝对是一个有效的假设。
您的活动包括可以覆盖的onPause()和onResume()方法,您可以存储和检索状态数据。使用它们会更好。
正确的解决方案包括一个根本不需要访问静态数据成员的解决方案。
答案 1 :(得分:1)
您应该考虑use of global variables,而不是在public static
中使用成员变量的Activity
。这样,只要您的应用程序处于活动状态,您的变量就会保留。