当点击home程序运行过程中突然来电话等意外情况屏幕方向改变时,会调用onSaveInstanceState()方法进行保存数据到手机硬盘上,再次运行Activity则调用onRestoreInstanceState()方法从硬盘中取出以保存的数据。也可onCreate()方法中的bundle对象中取数据:

 
  
  1. public void onCreate(Bundle savedInstanceState)  
  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.     }  
onSaveInstanceState() onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
另外,当屏幕的方向发生了改变, Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法,如下:
 
  
  1. public class PreferencesActivity extends Activity {  
  2.     private String name;  
  3.     protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  4.     name = savedInstanceState.getString("name"); //被重新创建后恢复缓存的数据  
  5.     super.onRestoreInstanceState(savedInstanceState);  
  6.     }  
  7.     protected void onSaveInstanceState(Bundle outState) {  
  8.     outState.putString("name""liming");//被摧毁前缓存一些数据  
  9.     super.onSaveInstanceState(outState);  
  10.     }  
  11. }  

Activity重新创建时,会先执行onCreate()方法,再执行onRestoreInstanceState()方法,也可以在onCreate()方法中取数据

 使用Activity默认的Shared Preference,也可以保存数据。
 如果需要单击返回按钮退出程序后,下次进入仍然可以保留数据,可以在onPause()方法中设置共享参数,实际是将数据保存在系统的xml文件中

 
  
  1.  protected void onPause(){  
  2. super.onPause();  
  3.  
  4. //SharedPreferences uiState = getPreferences(0);  
  5. //SharedPreferences.Editor editor = uiState.edit();  
  6. //editor.putString(TEXT_ENTRY_KEY, myEditText.getText().toString());  
  7. //editor.putBoolean(ADDING_ITEM_KEY, addingNew);  
  8. //editor.commit();// Commit the preferences.  
  9. //或:  
  10. this.getPreferences(MODE_PRIVATE).edit().putString(TEXT_ENTRY_KEY, myEditText.getText().toString());  
  11. }  

onResume()方法中取数据

 

 
  
  1. protected void onResume(){  
  2. super.onResume();  
  3.       this.getPreferences(MODE_PRIVATE).edit().getString(TEXT_ENTRY_KEY,…………  
  4.     }  
注意 :如果系统中有两个Activity,一个处于暂停状态,一个处于停止状态,当内存不足时,系统会首先杀死停止状态的Activity