この答えの最初の部分は本当に古いです - それは
あなたはストアアプリケーションの永続オブジェクトへのアプリケーションのオブジェクトを使用することができます行うには権利方法については、以下を参照してください。 This Android FAQもこの問題について話しています。
このような何か:
public class MyApplication extends Application{
private String thing = null;
public String getThing(){
return thing;
}
public void setThing(String thing){
this.thing = thing;
}
}
public class MyActivity extends Activity {
private MyApplication app;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = ((MyApplication)getApplication());
String thing = app.getThing();
}
}
右方法:この答えが最初に書かれた
、活動のライフサイクルのドキュメントは、それが今ほど良くありませんでした。アクティビティ文書のSaving Activity Stateセクションを読むと、Androidがどのように状態を保存するかを理解するのに役立ちます。基本的に、あなたの活動が始まる2つの状況があります:(1)新しい活動として、(2)構成の変更またはメモリ圧迫のために破壊された後に再作成されるためです。新しいアクティビティであるためにアクティビティが開始されると、saveInstanceStateはnullになります。それ以外の場合はnullではありません。 nullの場合は、アクティビティを最初から初期化する必要があります。フラグメントはアクティビティと非常によく似ています。私はこの概念を私のAnDevCon-14 slide deckについて詳しく説明しました。詳細については、AnDevCon-14プレゼンテーションのsample codeをご覧ください。
私の前の例は、以下のコードのようになります。私はセマンティクスを少し変更する - この2番目のバージョンでは、文字列thing
が特定のandroid task内のアクティビティに固有であると仮定します。前の例ではあいまいです。複数のアンドロイドタスクのために同じデータを保持したい場合は、アプリケーションオブジェクトまたは別のシングルトンのいずれかを使用することが最良の方法です。
public class MyActivity extends Activity {
private static final String THING = "THING";
private String thing;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState==null) {
// First time here (since we last backed out at least)
thing = initializeThing(); // somehow we init it
} else {
// Rehydrate this new instance of the Activity
thing = savedInstanceState.getString(THING);
}
String thing = app.getThing();
}
protected void onSaveInstanceState(Bundle outState) {
outState.putString(THING, thing);
}
}
わからないが、私はAndroidの開発者は、メモリへの傾向があるとして、あなたが、不必要に静的な参照を保持しないことをお勧めしますことを知っています漏れ:http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html – I82Much
まあ、その記事はContextsを漏らすことです。これは、コンテキストがその静的参照を介して強く到達可能である場合の唯一の懸念事項である。ビューは表示されますが、バンドルは表示されません(私が知る限り)。しかし、一般的に私は、クラスが読み込まれると、静的な参照は、Androidの中で真実ではないように見える限り、アプリケーションと同じくらい長く存続すると仮定します。 – Matthias