在后台终止应用程序时,Bundle savedInstanceState parcelable对象为null = null

时间:2016-10-12 16:22:22

标签: android bundle parcelable onsaveinstancestate

我尝试在我的应用程序在后台被杀后尝试恢复它。尝试访问" 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());
}

1 个答案:

答案 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