当我们在微博中洋洋洒洒写了n多文字时,这时候电话铃声突然响起,当我们挂断电话时发现我们写的文字已经消失的无影无踪了。这时候你是不是感觉郁闷的要死啊,哈哈。。。,这就是今天我要说的activity的状态保存。
activity的状态保存有两种方式:
1.onSaveInstanceState和onRestoreInstanceState
2.onPause和onResume
下面我谈谈这两种方式的应用和区别
系统在回收当前activity之前调用onSaveInstanceState,主要表现为当前应用程序被其它程序打断,使当前应用程序由可见状态变为不可见状态。但是按Back or home键不会调用此方法。通过Bundle来保存信息,比如上面的例子
横竖屏切换的时候或者按了home or Back键之后再回来的时候调用onPause方法,通过Preferences来保存
代码如下:
import sundy.android.demo.configration.CommonConstants;
import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
public class MainTestActivity extends Activity{
private final String SAVE_INSTANCE_TAG = "MainTestActivity.Saveinstancetag" ;
EditText editText = null ;
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
if(outState !=null)
{
outState.putString(this.SAVE_INSTANCE_TAG, "hello Sundy") ;
}
Log.i(CommonConstants.LOGCAT_TAG_NAME,"onSaveInstanceState") ;
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(sundy.android.demo.R.layout.layout_activitysavestate) ;
Log.i(CommonConstants.LOGCAT_TAG_NAME,"onCreate") ;
editText = (EditText)this.findViewById(sundy.android.demo.R.id.editTextState) ;
if(editText !=null && savedInstanceState != null)
{
editText.setText(savedInstanceState.getString(this.SAVE_INSTANCE_TAG)) ;
}
if(savedInstanceState != null)
{
Log.i(CommonConstants.LOGCAT_TAG_NAME,"savedInstanceState = "+savedInstanceState.getString(SAVE_INSTANCE_TAG)) ;
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
this.getPreferences(MODE_PRIVATE).edit().putString(SAVE_INSTANCE_TAG, editText.getText().toString()).commit() ;
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
editText.setText(this.getPreferences(MODE_PRIVATE).getString(SAVE_INSTANCE_TAG, "")) ;
Log.i(CommonConstants.LOGCAT_TAG_NAME,"onResume") ;
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
Log.i(CommonConstants.LOGCAT_TAG_NAME,"onRestoreInstanceState") ;
}
}
import sundy.android.demo.configration.CommonConstants;
import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
public class MainTestActivity extends Activity{
private final String SAVE_INSTANCE_TAG = "MainTestActivity.Saveinstancetag" ;
EditText editText = null ;
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
if(outState !=null)
{
outState.putString(this.SAVE_INSTANCE_TAG, "hello Sundy") ;
}
Log.i(CommonConstants.LOGCAT_TAG_NAME,"onSaveInstanceState") ;
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(sundy.android.demo.R.layout.layout_activitysavestate) ;
Log.i(CommonConstants.LOGCAT_TAG_NAME,"onCreate") ;
editText = (EditText)this.findViewById(sundy.android.demo.R.id.editTextState) ;
if(editText !=null && savedInstanceState != null)
{
editText.setText(savedInstanceState.getString(this.SAVE_INSTANCE_TAG)) ;
}
if(savedInstanceState != null)
{
Log.i(CommonConstants.LOGCAT_TAG_NAME,"savedInstanceState = "+savedInstanceState.getString(SAVE_INSTANCE_TAG)) ;
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
this.getPreferences(MODE_PRIVATE).edit().putString(SAVE_INSTANCE_TAG, editText.getText().toString()).commit() ;
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
editText.setText(this.getPreferences(MODE_PRIVATE).getString(SAVE_INSTANCE_TAG, "")) ;
Log.i(CommonConstants.LOGCAT_TAG_NAME,"onResume") ;
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
Log.i(CommonConstants.LOGCAT_TAG_NAME,"onRestoreInstanceState") ;
}
}