アクティビティ/プロセスのライフサイクル-データをディスクに保存/ロードするタイミング
-
05-07-2019 - |
質問
私のアプリは、AとBの2つのアクティビティで構成されています。この一連の手順を検討しています。
- アクティビティAが開始されました。
- AがBを起動します[Aが一時停止され、Bが実行されています]。
- Bはマップインテントを起動します[AとBは両方とも現在一時停止中です。]
現在、ユーザーはマップアプリケーションを使用しており、システムはより多くのメモリが必要であると判断します。システムは、メモリのために私のアクティビティの 1つのみを強制終了できますか、または「プロセス」内のすべてのアクティビティを常に強制終了できますか。この状況で?
両方のアクティビティは、次のような静的データを共有します:
class Data {
public static String mName;
public void save() {
// write to file: mName;
}
public void load() {
// mName = read from file;
}
}
ActivityA.mTextView.setText(Data.mName);
ActivityB.mListView.addText(Data.mName);
したがって、アプリ内のアクティビティでonSaveInstanceBundleSate()が呼び出されると、Data.save()を呼び出してディスクに書き込みます。質問は、ActivityのonCreate()メソッドで、Data.mName == nullかどうかを単純に確認する必要があり、そうであれば、Activityが強制終了状態から戻っていると仮定し、ディスクからの復元を再度試行しますか?アクティビティAがまだ生きているかどうかなどを考慮して、この復元をいつ行うべきかは不明です-アクティビティAはまだ生きているが、Bが強制終了状態から戻っている場合、状態を破壊したくない
ありがとう
ありがとう
解決
おそらく最善の解決策は、静的データをサービスに移動することです。そうすれば、Androidがデータを使用して個々のアクティビティのいずれかをシャットダウンするときではなく、Androidがサービスをシャットダウンするときにデータを保存および復元できます。
サービス(または、コンテンツプロバイダー、またはそれを嫌うように見えてもオーバーライドするアプリケーション)を使用せずに、自分でそのライフサイクルを管理する必要があります。