2016-10-12 58 views
0

我試圖在後臺終止它之後恢復應用程序。它試圖訪問「config」變量時總是崩潰,因爲它是空的,即使它已經保存在onSaveInstanceState(它總是,我已經在調試模式下測試過,並且outstate在它的映射中有對象)。當在後臺中終止應用程序時,Bundle savedInstanceState parcelable對象爲空= null

讓我困惑的是,這對旋轉情況非常有效。所以我認爲從包裹的對象構造沒有任何問題。當我在後臺殺死應用程序時,它不起作用。

當我在後臺殺死應用程序後,在onCreate中記錄savedInstanceState時,Config.BUNDLE返回null = null(無鍵,無值),但是類似的對象Account.BUNDLE是完好無損的。

此外,我試着添加另一個字符串對象到savedInstanceState,它也被正確保存。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null) { 
     Config config = savedInstanceState.getParcelable(Config.BUNDLE); 
     Config.setInstance(config); 
     Account account = savedInstanceState.getParcelable(Account.BUNDLE); 
     Account.setInstance(account); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelable(Config.BUNDLE, Config.getInstance()); 
    outState.putParcelable(Account.BUNDLE, Account.getInstance()); 
} 
+0

'onSaveInstanceState'和'捆綁savedInstanceState'旨在用於旋轉箱子或其他,臨時的,破壞/重新創建場景。在後臺關閉應用程序相當於將電池拉出應用程序,因此在這種情況下,沒有任何生命週期方法可用。 – DeeV

+0

我認爲你需要將你的包參數轉換成Config –

回答

0

我剛剛發現問題是Bundle密鑰字符串。

Config.BUNDLE是一個值爲「BUNDLE_CONFIG」並且Account.BUNDLE是「BUNDLE_ACCOUNT」的字符串。

如果我將Config.BUNDLE字符串更改爲任何其他值,而不在字符串的任何部分包含「CONFIG」,它將起作用,否則不起作用。我甚至已經清理了這個項目,但結果是一樣的。我不明白爲什麼。

實施例:

public final static String BUNDLE = "BUNDLE_CONFIG"; //NOT OK 
public final static String BUNDLE = "BUNDLE_SETTINGS_CONFIG"; //NOT OK 
public final static String BUNDLE = "BUNDLE_TEST"; //OK 
public final static String BUNDLE = "BUNDLE_ANY_OTHER_WORD"; //OK 
+0

關鍵字串的值應該不重要(在合理範圍內)。也許你在SharedPreferences中有一些陳舊的信息鍵?您是否曾嘗試卸載並重新安裝APK以獲取全新的SharedPreferences?只是一個想法... – Mike

相關問題