今天学习了保存activity的状态的一种方法: 使用onSaveInstanceState()方法。
为神马要保存activity的状态?
比如,当我们玩俄罗斯方块的时候,玩到一半想退出,干别的事情去了,然后隔了很久一段时间后突然想玩了,这时打开游戏后,我们希望接着上一次继续玩(尽管上次已经完全退出了),这种情况下可以用onSaveInstanceState( )方法来实现。
怎么做?
重写onSaveInsanceState()方法,把需要保存的信息以bundle的形式保存,然后在onCreate()里取出bundle中的信息,这里就用到了onCreate()方法的参数,刚好是个bundle类型的onSaveInsanceState 参数,终于明白为啥onCreate()方法里有个这样的参数了,哈哈~
上代码,很简单的例子:
public class ActivityLifeCycleActivity extends Activity {
private EditText txt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txt = ( EditText )findViewById(R.id.txt);
if( savedInstanceState != null ) {
String str_info = savedInstanceState.getString("info");
txt.setText(str_info);
Log.i("--- restore state in onCreate() --- ", str_info);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
String str = txt.getText().toString();
outState.putString("info", ( ( str.equals(null) ) == true ) ? "empty info" : str );
Log.i("--- onSaveInstanceState called --- ", str);
}
}
注意点:
onSaveInsanceState( ) 方法并不是每次退出程序时都会调用!
当按HOME键时,会被调用;当按back键,不会调用。因为按home键退出时,是执行到activity的onStop方法,并没有销毁;而按back键则会直接执行到onDestroy方法,是人为地销毁。