グローバルステート
あなたの友だちです。:)
必要なときはいつでも(終了する前に)グローバル文字列をチェックしてください。列挙型も必要になる場合がありますstate
。または、状態が有効かどうかを確認するためのフラグ。
レシピ:
発生しているより一般的な問題は、いくつかのアクティビティとアプリケーションのすべての部分にわたって状態を保存する方法です。静的変数(たとえば、シングルトン)は、これを実現するための一般的なJavaの方法です。ただし、Androidでのより洗練された方法は、状態をアプリケーションコンテキストに関連付けることです。
ご存知のように、各アクティビティはコンテキストでもあり、最も広い意味での実行環境に関する情報です。アプリケーションにもコンテキストがあり、Androidは、アプリケーション全体で単一のインスタンスとして存在することを保証します。
これを行う方法は、 android.app.Applicationの独自のサブクラスを作成し、マニフェストのアプリケーションタグでそのクラスを指定することです。これで、Androidはそのクラスのインスタンスを自動的に作成し、アプリケーション全体で利用できるようにします。Context.getApplicationContext()メソッドを使用して、任意のコンテキストからアクセスできます(Activityは、まったく同じ効果を持つgetApplication()メソッドも提供します)。
class MyApp extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
class BlahBlah extends Service {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
これは、静的変数またはシングルトンを使用する場合と基本的に同じ効果がありますが、既存のAndroidフレームワークに非常によく統合されます。これはプロセス間では機能しないことに注意してください(アプリが複数のプロセスを持つまれなアプリの1つである必要があります)。
クレジットは@Soonilに送られます