Activityの状態保存
3543 ワード
ホームキーをクリックしたり、プログラムの実行中に突然電話がかかってきたり、画面の方向が変わったりすると、onSaveInstanceState()メソッドを呼び出して携帯電話のハードディスクにデータを保存し、Activityを再実行するとonRestoreInstanceState()メソッドを呼び出してハードディスクから保存したデータを取り出します.onCreate()メソッドのbundleオブジェクトからデータを取得することもできます.
1 onSaveInstanceState()とonRestoreInstanceState()はライフサイクルメソッドではありません.onCreate()やonPause()などのライフサイクルメソッドとは異なり、必ずしもトリガーされるわけではありません.アプリケーションが予期せぬ状況(メモリ不足、ユーザーがホームキーを直接押すなど)に遭遇し、システムによってActivityが破棄されると、onSaveInstanceState()が呼び出されます.しかし、ユーザーがアクティブにActivityを破棄すると、たとえばアプリケーションで戻りキーを押すと、onSaveInstanceState()は呼び出されません.この場合,ユーザの行動がActivityを保存する必要がない状態を決定するためである.通常、onSaveInstanceState()は一時的な状態を保存するのに適しており、onPause()はデータの永続化保存に適しています.
また、画面の方向が変更されると、Activityは破壊され、再作成されます.Activityが破壊される前にデータをキャッシュし、Activityが再作成された後にキャッシュされたデータを復元したい場合は、ActivityのonSaveInstanceState()およびonRestoreInstanceState()メソッドは、次のように書き換えることができます.
Activityが再作成されると、onCreate()メソッドが実行され、onRestoreInstanceState()メソッドが実行されます.onCreate()メソッドでデータを取得することもできます.
②ActivityデフォルトのShared Preferenceを使用して、データを保存することもできます.「≪戻る|Back|emdw≫」ボタンをクリックしてプログラムを終了する必要がある場合は、次回に入ってもデータを保持できます.onPause()メソッドで共有パラメータを設定し、実際にシステムのxmlファイルにデータを保存します.
onResume()メソッドでのデータの取得
注意:システムに2つのActivityがある場合、1つは一時停止状態、1つは停止状態であり、メモリが不足している場合、システムはまず停止状態のActivityを殺します.
この文書は「ITの夢」ブログから出ています.この出典http://dreamboy.blog.51cto.com/3180937/723871は必ず保持してください.
- publicvoidonCreate(BundlesavedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- txt=(EditText)findViewById(R.id.txt);
- if(null!=savedInstanceState&&savedInstanceState.containsKey(CONTENT))
- {
- txt.setText(savedInstanceState.getString(CONTENT));
- }
- secondBtn=(Button)findViewById(R.id.secondBtn);
- secondBtn.setOnClickListener(listener);
- Log.i(TAG,"MainActivity-->onCreate");
- }
1 onSaveInstanceState()とonRestoreInstanceState()はライフサイクルメソッドではありません.onCreate()やonPause()などのライフサイクルメソッドとは異なり、必ずしもトリガーされるわけではありません.アプリケーションが予期せぬ状況(メモリ不足、ユーザーがホームキーを直接押すなど)に遭遇し、システムによってActivityが破棄されると、onSaveInstanceState()が呼び出されます.しかし、ユーザーがアクティブにActivityを破棄すると、たとえばアプリケーションで戻りキーを押すと、onSaveInstanceState()は呼び出されません.この場合,ユーザの行動がActivityを保存する必要がない状態を決定するためである.通常、onSaveInstanceState()は一時的な状態を保存するのに適しており、onPause()はデータの永続化保存に適しています.
また、画面の方向が変更されると、Activityは破壊され、再作成されます.Activityが破壊される前にデータをキャッシュし、Activityが再作成された後にキャッシュされたデータを復元したい場合は、ActivityのonSaveInstanceState()およびonRestoreInstanceState()メソッドは、次のように書き換えることができます.
- publicclassPreferencesActivityextendsActivity{
- privateStringname;
- protectedvoidonRestoreInstanceState(BundlesavedInstanceState){
- name=savedInstanceState.getString("name");//
- super.onRestoreInstanceState(savedInstanceState);
- }
- protectedvoidonSaveInstanceState(BundleoutState){
- outState.putString("name","liming");//
- super.onSaveInstanceState(outState);
- }
- }
Activityが再作成されると、onCreate()メソッドが実行され、onRestoreInstanceState()メソッドが実行されます.onCreate()メソッドでデータを取得することもできます.
②ActivityデフォルトのShared Preferenceを使用して、データを保存することもできます.「≪戻る|Back|emdw≫」ボタンをクリックしてプログラムを終了する必要がある場合は、次回に入ってもデータを保持できます.onPause()メソッドで共有パラメータを設定し、実際にシステムのxmlファイルにデータを保存します.
- protectedvoidonPause(){
- super.onPause();
-
- //SharedPreferencesuiState=getPreferences(0);
- //SharedPreferences.Editoreditor=uiState.edit();
- //editor.putString(TEXT_ENTRY_KEY,myEditText.getText().toString());
- //editor.putBoolean(ADDING_ITEM_KEY,addingNew);
- //editor.commit();//Committhepreferences.
- // :
- this.getPreferences(MODE_PRIVATE).edit().putString(TEXT_ENTRY_KEY,myEditText.getText().toString());
- }
onResume()メソッドでのデータの取得
- protectedvoidonResume(){
- super.onResume();
- this.getPreferences(MODE_PRIVATE).edit().getString(TEXT_ENTRY_KEY,…………
- }
注意:システムに2つのActivityがある場合、1つは一時停止状態、1つは停止状態であり、メモリが不足している場合、システムはまず停止状態のActivityを殺します.
この文書は「ITの夢」ブログから出ています.この出典http://dreamboy.blog.51cto.com/3180937/723871は必ず保持してください.