2011-05-17 65 views
1

所以,我有以下後會失去狀態:Android應用程序啓動另一個意圖

一個通用類,很多在我的Android應用我的活動的機會,通過我的清單設置類:

<application android:name="com.dev.games.phraseparty.Common"... /> 

現在,在這個類中,我有幾個對象被構造來保存應用程序狀態和公共服務,以執行在通用構造函數中構造的應用程序

GameStateVO gameState; 

public Common() 
{ 
    gameState = new GameStateVO(); 
} 

我的問題是我的Activity有一個Admob廣告。當用戶點擊廣告時,它會調用webbrowser意圖在網頁瀏覽器中打開廣告網址。

現在,當我從admob發起的webbrowser點擊回來時,它將我帶回到校準活動並調用OnCreate方法。

這個活動然後得到一個空指針異常,因爲它會做這樣的事情:

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
Common common = this.getApplication(); 

//null pointer here since the game state VO is null since the Common has lost its state. 
int score = common.getGameState().getScore(); 

} 
+0

這聽起來像你的應用程序正在經歷一個艱難的殺戮。你可能想要堅持國家在onStop的硬性殺死說偏見。你可以通過使用一個標誌isSavedInstanceState來做到這一點。在onResume中將其設置爲false,並在onSaveInstanceState中將其設置爲true。然後在onStop中寫入prefs if(!isSavedInstanceState)。如果onCreate == null中的包,則從onCreate中的prefs讀入。 – JAL 2011-05-17 06:17:20

回答

1

如果沒有活動的前臺活動,那麼你的進程已經成熟由操作系統關機,以獲得更多的資源。特別是我注意到的瀏覽器應用程序使用了大量的資源,並且可以迅速導致後臺活動和後來的進程被終止。有一項服務可以幫助保持你的過程,但即使如此,如果需要的話,它仍然可以被殺死。我認爲你需要使用活動生存週期方法來保存&恢復你的狀態。請參閱文檔的process lifecycle部分以獲取更多信息

+0

但是,應用程序類中存儲的數據呢? – neteinstein 2011-05-18 16:02:44

1

您可能想要考慮實施onSaveInstanceState方法:這樣可以在任何相關信息中斷之前存儲它。請參閱http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState%28android.os.Bundle%29以瞭解您需要實施的實際呼叫,而Saving Android Activity state using Save Instance State是一個非常優秀的示例。

+0

謝謝你的幫助。我現在正在拯救國家和恢復我的方法,並沒有更多的崩潰。 – Logan 2011-05-17 19:09:30

+0

很高興知道這對你有用。 – Femi 2011-05-17 19:41:27

相關問題