1

現在、Applicationクラスの静的プロパティにデータを格納しています。アプリを閉じてもデータは残りますが、アプリが最近のメニューから消去される (またはキャッシュされたプロセスが強制終了される) と、Applicationクラスもメモリから消去されたように見えます。

アクティビティ/フラグメントからデータに簡単にアクセスできるようにする必要がありますBroadcastReceiver。を起動すると、データが最初に読み込まれMainActivityます。私のコードは私の GitHub プロジェクトで見ることができます。

アップデート

データの保存に SQLite を使用しています。アクティビティは、開始時にデータをメモリにロードします。BroadcastReceiverただし、これらは寿命が限られており、SQLite は長時間実行される可能性があるため、からこれを行うことはできないと思います。主な問題はBroadcastReceiver、アクティビティと同じデータを操作できるようにする必要があることです。

4

2 に答える 2

1

もう 1 つの興味深い可能性は、データを xml ファイルとして保存することです。たとえば、単純な XML ライブラリを使用できます: http://simple.sourceforge.net/

まず、モデル クラスで注釈を作成する必要があります。

@Root
public class Example {

@Element
private String text;

@Attribute
private int index;

public Example() {
  super();
}  

public Example(String text, int index) {
  this.text = text;
  this.index = index;
}

public String getMessage() {
  return text;
}

public int getId() {
  return index;
}
}

次に、これらのオブジェクトを保存できます。

 Serializer serializer = new Persister();
 Example example = new Example("Example message", 123);
 File result = new File("example.xml");

 serializer.write(example, result);

このファイルを再度取得するには、次のようにします。

Serializer serializer = new Persister();
File source = new File("example.xml");

Example example = serializer.read(Example.class, source);

これはプロジェクト サイトから引用した最も単純な例の 1 つですが、ネストされたオブジェクトとリストを記述することができます。また、非常によく文書化されています

于 2013-03-28T17:51:28.347 に答える
1

もっと簡単な方法は、android の設定を使用することです。他の方法には、ディスクへのファイルまたは SQLite db への保存が含まれます。これを読むことから始めることができます:データを android に保存します

Android チュートリアルの例:

//Saving the data
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

//Loading of the saved data
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

SQLlite 操作にAsyncTaskを使用できます。

于 2013-03-28T16:11:19.220 に答える