8

ユーザーに情報のリストを表示するアクティビティと、ユーザーが新しい情報を作成できるサブアクティビティの2つのアクティビティがあります

明確に言えば、最初のアクティビティから「startActivityForResult ()」を呼び出し、ユーザーが必要なものを 2 番目のアクティビティに入れると、最初のアクティビティに戻り、「onActivityResult ()」関数で情報を受け取ります。情報を保存します。

ここでの問題は、「アクティビティを保持しない」オプションです。これはメモリの少ない携帯電話で発生することを読みました。しかし、デバイスがアクティビティを閉じるとき、どうすればそれを処理できるでしょうか?

私の例では、2 番目のアクティビティが呼び出されると、最初のアクティビティが kill されるため、そのアクティビティに戻るとクラッシュが発生し、情報が失われます。

それを処理する適切な方法は何ですか?ファイルを使用しているため、2 番目のアクティビティで自分の情報を保存できないことを知っています。

4

2 に答える 2

3

目的に合わせてSharedPreferencesを使用します。ちなみに、この手法を使用して、アクティビティをまったく閉じたときにデータを保存できます。

クラスデータを取得し、使用して文字列に変換してGSON保存します。

ロード時に、それを移動してSharedPreferences、文字列からオブジェクトに変換します。

MyDataすべてのインポテンツ情報を含むクラスがあるとしましょう。

MyData myData = ....;

SharedPreferences mPrefs = context.getSharedPreferences("MyPrefs", 0);
Gson gson = new Gson();
String toStore = gson.toJson(myData);


SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("stored", toStore);
editor.commit();

 ....

以前のアクティビティを再度ロードすると、次のようになります。

String loadedMyDataStr = mPrefs.getString("stored", "");
MyData data = gson.fromGson(loadedMyDataStr, MyData.class );
于 2012-11-18T10:35:14.697 に答える
1

あなたが言ったように、各アクティビティはonPauseメソッド呼び出し後いつでも強制終了できます。最初のアクティビティから ListView の状態を保存してonPause読み込むことonResumeができます。この目的にはシングルトンを使用できます。

また、操作はonPauseできるだけ高速にする必要があります。複雑な操作は行わないでください。そうしないと、アプリケーションがフリーズしたように見え、ユーザーが操作できなくなります...

于 2012-11-18T10:36:00.623 に答える