8

Android では、Google はアプリケーションにグローバル変数を保存することを推奨しています。しかし、問題があります。Android OS がメモリ不足のためにアプリケーションを強制終了すると、アプリケーションが再作成され、保存したグローバル変数が失われます。

これらの変数を保存/復元するタイミングがわかりません。アプリケーションは onsaveinstancestate()/onrestoreinstancestate() などのメソッドを提供しません。

アイデアは 1 つありますが、うまく機能するかどうかはわかりません。一部のアプリは、OS によって強制終了されたときに slashScreen に移動するようですが、これらの gloabl 変数を SplashAvtivity に保存できますか? Activity にはメソッド onsaveinstancestate()/onrestoreinstancestate() があるため、アプリは最初に splashActivity を開始し、それを終了しません。OS がアプリを kill していることが判明したら、SplashActivity (タスク内のすべてのアクティビティを終了) に再度移動し、次に onrestoreinstancestate に移動できます。 ().

グローバル変数を保存/復元する他の良い方法はありますか? もちろん、Google がアプリケーションで onsaveinstancestate()/onrestoreinstancestate() などのメソッドを提供してくれれば、もっと良いと思います.:S

4

2 に答える 2

8

実行間で変数を永続化する必要がある場合は、ディスクの永続化を行う必要があります。Raghunandan が提案する最も簡単な方法は、Shared Preferences を使用することです。

これを行うには、まず共有設定をリクエストします。

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("key_name", "key_value");
editor.commit(); //important, otherwise it wouldn't save.

たとえば、アクティビティの onStop または onPause でこれを行うことができます (onPause は常に呼び出されますが、onStop が Honeycomb の前に呼び出されるという保証はありません)。

onCreate で (または値が必要な場合)、SharedPreferences から読み取り、値が設定されているかどうかを確認します。それ以外の場合は、既定値を使用します。

SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
String myVariable = prefs.getString("key_name", "default_value");

myVariable以前に何も保存されていない場合は、永続化された値または初期 (デフォルト) 値を使用できるようになりました。

詳細については、https://developer.android.com/guide/topics/data/data-storage.html#prefを参照してください。

明確にするために、PREFS_NAME共有設定ファイルの名前です。通常、アプリケーションのパッケージ名を先頭に追加することをお勧めします。

于 2013-11-05T06:37:34.640 に答える