1

バックグラウンドで強制終了されたアプリを復元しようとしています。「config」変数にアクセスしようとすると、常にクラッシュします。これは、onSaveInstanceState に保存された後でも null であるためです (常に、デバッグ モードでテストし、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());
}
4

1 に答える 1

1

問題はバンドル キー文字列であることがわかりました。

Config.BUNDLE は値が「BUNDLE_CONFIG」の文字列で、Account.BUNDLE は「BUNDLE_ACCOUNT」です。

文字列のどの部分にも「CONFIG」を含めずに Config.BUNDLE 文字列を他の値に変更すると、機能しますが、そうでない場合は機能しません。プロジェクトをクリーンアップしましたが、結果は同じです。理由がわかりません。

例:

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 に答える