2016-10-12 17 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

相关问题