0

複数のエンティティ クラスへの参照を格納するクラスを持つ Android アプリがあります。このクラスはうまく機能しますが、1 つの問題があります。

このクラスにデータがあり、アプリをバックグラウンドに移動 (ホーム ボタンを押す) し、十分な時間待機して電話で他のことを行うと、アプリをフォアグラウンドに移動すると、データが失われます。アプリは最後に開いた画面に読み込まれますが (アプリを再起動しません)、このクラスに保存されていたすべてのデータは失われます。

常に発生するとは限らないので、ある種のメモリ管理の問題であると思いますが、このデータを永続的に維持する方法を見つけようとしています。または、存在していて現在存在しない場合は、アプリを最初から再起動します。

このデータを保持/再構築するにはどうすればよいですか?

4

2 に答える 2

3

アクティビティのライフサイクルを確認して、アクティビティがいつどのように破棄、作成されるかをよりよく理解してください。

アクティビティが破棄される前に、onSaveInstanceState(Bundle)メソッドが呼び出されます。メソッドをオーバーライドして、状態をバンドルに保存します。この方法で保存されたデータはonCreate(Bundle)、後続の呼び出しで に提供されます。

protected void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putString("myKey", "myValue"); // trivial, but for illustration purposes.
}
于 2013-04-08T08:17:24.947 に答える
1

バンドル オブジェクトにデータを保存できます。このオブジェクトは、ロードしているアクティビティの Oncreate にパラメータとして渡されます。保存しているデータが小さい場合は、sharedpreference を使用して、アクティビティの読み込み中に元に戻すことができます。

私の推測では、アクティビティの onpause メソッドでエンティティ クラスのオブジェクトをクリアしている可能性があるため、データが失われている可能性があります。一度確認してください。

于 2013-04-08T08:25:09.540 に答える