我尝试在我的应用程序在后台被杀后尝试恢复它。尝试访问" config"它总是会崩溃。变量,因为它是null,即使它已经保存在onSaveInstanceState上(它总是,我已经在调试模式下测试了它,并且outstate在它的地图中有对象)。
让我感到困惑的是,这完全适用于旋转案例。所以我认为包裹的对象构造没有任何问题。当我在后台杀死应用程序时,它不起作用。
当我在后台杀死应用程序后在onCreate中记录savedInstanceState时,Config.BUNDLE返回null = null(没有键,没有值),但Account.BUNDLE是一个类似的对象,完好无损。
此外,我已尝试将另一个String对象添加到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 :(得分: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