1

我正在尝试在后台被杀死后恢复我的应用程序。尝试访问“config”变量时它总是崩溃,因为它是空的,即使它已经保存在 onSaveInstanceState 上(它总是这样,我已经在调试模式下对其进行了测试,并且外州在它的地图中有对象)。

真正让我感到困惑的是,这在旋转情况下非常有效。所以我认为从包裹中构造对象没有任何问题。当我在后台终止应用程序时,它只是不起作用。

当我在后台杀死应用程序后在 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());
}
4

1 回答 1

1

我刚刚发现问题出在 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
于 2016-10-13T09:58:08.133 回答