Androidアプリを開発しました。それは正常に動作しますが、ユーザーがモバイルで高度なアプリキラーを使用してアプリを強制終了すると、アプリを再度開くとアプリがクラッシュします。これは、アプリ キラーがアプリのグローバル変数の内容をすべて削除しているためです。これを止める方法はありますか?
他の回避策は、私のアプリの onResume() のようなものかもしれません。アプリ キラーによってアプリが強制終了された場合は、アプリを再起動します。これを行う方法?
アプリが強制終了された場合、次回起動時にゼロから起動するためonCreate
、呼び出されます。
onResume
これで、アプリが強制終了されてから呼び出されたと主張します。これは意味がありません。が呼び出された場合onResume
、おそらくアプリはバックグラウンドに移行したためonPause
、前に呼び出す必要があります。が呼び出されたかどうかを確認onPause
し、正確に何が起こるかを理解してください。
onSaveInstanceState
次のようなコールバックを実装する必要があります-
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("param1", yourGlobalIntVariableName);
outState.putString("param2", yourGlobalStringVariableName);
}
そして、変数がnullでないonCreate
かどうかを確認する必要savedInstanceState
があり、nullでない場合は、saveInstanceState
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null) {
yourGlobalIntVariableName = savedInstanceState.getInt("param1");
yourGlobalStringVariableName = savedInstanceState.getString("param2"));
}
}
これで問題は解決するはずです。
Android 4.0 テスト デバイスをお持ちの場合は、[設定] -> [開発者向けオプション] -> [アクティビティを保持しない] に移動します。
チェックしてください。そして、アプリを実行します。正常に動作するかどうかを確認してください。理想的にはそうすべきです。OS はバック スタックでこれらのアクティビティの一部を強制終了することができ、アプリはそれを処理できるはずです。この開発者向けオプションは、そのようなケースをテストする方法を提供します。次のアクティビティに進むとすぐに、前のアクティビティがメモリから削除されます。