2011-06-08 125 views
0

我有一個活動,其中我初始化一些靜態變量(應用程序的菜單)。在另一個活動中,我在一些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延伸活動(AdMob整合)(如果我恢復應用程序,我暫停了應用程序後,而在GameActivity玩就不會被調用):如果我以後恢復 不會恢復之後崩潰幾分鐘。 (Galaxy S,它會自動刷新很多東西)如果我暫停此活動並在大約10分鐘後恢復活動,將會崩潰。在此活動恢復之前,將會調用OpenFeintApp。

我在這一點上一個NullPointerException:

if (MenuActivity.EXTRA_CONTENT_ONE) //This variable is false 
+0

需要更多信息。包括,你知道,什麼代碼崩潰了,因爲我們不是通靈。 – 2011-06-08 14:04:56

+0

原始表達式是什麼樣的?該應用程序不能崩潰if-a-simple-boolean-expression – Kaj 2011-06-08 14:05:14

回答

1

而不是在您的Activity中使用成員變量的public static,您應該考慮use of global variables。通過這種方式,只要應用程序處於活動狀態,變量就會保留。

1

要修改你的假設:我想這是不是安全使用另一個活動的靜態數據與預期它會在那裏任何時候我的其他活動存在。這絕對是一個有效的假設。

您的活動包括您可以覆蓋的onPause()和onResume()方法,並且您可以存儲和檢索狀態數據。使用它們會稍微好一些。

right解決方案雖然包括一個根本不需要訪問靜態數據成員的解決方案。

+0

謝謝!我應該如何保存設置和最終靜態變量以導出不同的版本? – Xazen 2011-06-09 14:52:54