经常会出现用户按到home键,退出了界面,或者安卓系统意外回收了应用的进程,这种情况下,使用Bundle savedInstanceState就可以用户再次打开应用的时候恢复的原来的状态。
看一段代码:
-
package com.example.test.com;
-
-
-
import android.app.Activity;
-
import android.os.Bundle;
-
import android.util.Log;
-
import android.view.Window;
-
-
public class MainActivity extends Activity {
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
-
requestWindowFeature(Window.FEATURE_NO_TITLE);
-
setContentView(R.layout.main);
-
-
-
if (savedInstanceState != null) {
-
Log.d("HELLO", "HELLO:应用进程被回收后,状态恢复");
-
String string = savedInstanceState.getString("username");
-
if (string != null) {
-
Log.d("HELLO", "HELLO:" + string);
-
}
-
}
-
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@Override
-
public void onSaveInstanceState(Bundle savedInstanceState) {
-
Log.d("HELLO", "HELLO:当Activity被销毁的时候,不是用户主动按back销毁,例如按了home键");
-
super.onSaveInstanceState(savedInstanceState);
-
savedInstanceState.putString("username", "initphp");
-
}
-
-
-
-
-
-
-
-
-
-
@Override
-
public void onRestoreInstanceState(Bundle savedInstanceState) {
-
super.onRestoreInstanceState(savedInstanceState);
-
Log.d("HELLO", "HELLO:如果应用进程被系统咔嚓,则再次打开应用的时候会进入");
-
}
-
}
我们的具体操作:
首先打开这个app应用
其次,按home键,例如意外中止,则会调用onSaveInstanceState方法。可以看到以下日志:

这个时候,如果直接去打开这个应用,可能系统并没有回收这个进程所在的资源,并不能体现出状态恢复的实验,我们可以通过DDMS中,中止这个APP的进程:

中止进程后,再打开应用进入,看看是否有日志:

可以看到上面 initphp这个username也获取到了,说明恢复了状态。恭喜,实验成功。
关键点在于:是否进程被系统回收掉
转自:http://blog.csdn.net/initphp/article/details/11973651