Activityの状態保存

3543 ワード

ホームキーをクリックしたり、プログラムの実行中に突然電話がかかってきたり、画面の方向が変わったりすると、onSaveInstanceState()メソッドを呼び出して携帯電話のハードディスクにデータを保存し、Activityを再実行するとonRestoreInstanceState()メソッドを呼び出してハードディスクから保存したデータを取り出します.onCreate()メソッドのbundleオブジェクトからデータを取得することもできます.

  
  1. publicvoidonCreate(BundlesavedInstanceState)
  2. {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.main);
  5. txt=(EditText)findViewById(R.id.txt);
  6. if(null!=savedInstanceState&&savedInstanceState.containsKey(CONTENT))
  7. {
  8. txt.setText(savedInstanceState.getString(CONTENT));
  9. }
  10. secondBtn=(Button)findViewById(R.id.secondBtn);
  11. secondBtn.setOnClickListener(listener);
  12. Log.i(TAG,"MainActivity-->onCreate");
  13. }

1 onSaveInstanceState()とonRestoreInstanceState()はライフサイクルメソッドではありません.onCreate()やonPause()などのライフサイクルメソッドとは異なり、必ずしもトリガーされるわけではありません.アプリケーションが予期せぬ状況(メモリ不足、ユーザーがホームキーを直接押すなど)に遭遇し、システムによってActivityが破棄されると、onSaveInstanceState()が呼び出されます.しかし、ユーザーがアクティブにActivityを破棄すると、たとえばアプリケーションで戻りキーを押すと、onSaveInstanceState()は呼び出されません.この場合,ユーザの行動がActivityを保存する必要がない状態を決定するためである.通常、onSaveInstanceState()は一時的な状態を保存するのに適しており、onPause()はデータの永続化保存に適しています.
また、画面の方向が変更されると、Activityは破壊され、再作成されます.Activityが破壊される前にデータをキャッシュし、Activityが再作成された後にキャッシュされたデータを復元したい場合は、ActivityのonSaveInstanceState()およびonRestoreInstanceState()メソッドは、次のように書き換えることができます.

  
  1. publicclassPreferencesActivityextendsActivity{
  2. privateStringname;
  3. protectedvoidonRestoreInstanceState(BundlesavedInstanceState){
  4. name=savedInstanceState.getString("name");//
  5. super.onRestoreInstanceState(savedInstanceState);
  6. }
  7. protectedvoidonSaveInstanceState(BundleoutState){
  8. outState.putString("name","liming");//
  9. super.onSaveInstanceState(outState);
  10. }
  11. }

Activityが再作成されると、onCreate()メソッドが実行され、onRestoreInstanceState()メソッドが実行されます.onCreate()メソッドでデータを取得することもできます.
②ActivityデフォルトのShared Preferenceを使用して、データを保存することもできます.「≪戻る|Back|emdw≫」ボタンをクリックしてプログラムを終了する必要がある場合は、次回に入ってもデータを保持できます.onPause()メソッドで共有パラメータを設定し、実際にシステムのxmlファイルにデータを保存します.

  
  1. protectedvoidonPause(){
  2. super.onPause();
  3. //SharedPreferencesuiState=getPreferences(0);
  4. //SharedPreferences.Editoreditor=uiState.edit();
  5. //editor.putString(TEXT_ENTRY_KEY,myEditText.getText().toString());
  6. //editor.putBoolean(ADDING_ITEM_KEY,addingNew);
  7. //editor.commit();//Committhepreferences.
  8. // :
  9. this.getPreferences(MODE_PRIVATE).edit().putString(TEXT_ENTRY_KEY,myEditText.getText().toString());
  10. }

onResume()メソッドでのデータの取得

  
  1. protectedvoidonResume(){
  2. super.onResume();
  3. this.getPreferences(MODE_PRIVATE).edit().getString(TEXT_ENTRY_KEY,…………
  4. }

注意:システムに2つのActivityがある場合、1つは一時停止状態、1つは停止状態であり、メモリが不足している場合、システムはまず停止状態のActivityを殺します.
この文書は「ITの夢」ブログから出ています.この出典http://dreamboy.blog.51cto.com/3180937/723871は必ず保持してください.