内存问题(?)导致崩溃

时间:2011-06-08 13:59:46

标签: android

我有一个活动,我在其中初始化一些静态变量(应用程序的菜单)。在另一个活动中,我在一些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

2 个答案:

答案 0 :(得分:1)

重新表达你的假设:我认为使用另一个活动的静态数据是不安全的,并且期望在我的其他活动存在的任何时候它都会存在。这绝对是一个有效的假设。

您的活动包括可以覆盖的onPause()和onResume()方法,您可以存储和检索状态数据。使用它们会更好。

正确的解决方案包括一个根本不需要访问静态数据成员的解决方案。

答案 1 :(得分:1)

您应该考虑use of global variables,而不是在public static中使用成员变量的Activity。这样,只要您的应用程序处于活动状态,您的变量就会保留。