目的:Activity被系统销毁,重建时能恢复销毁前的状态。

原理:

Android Activity 之 重新创建_第1张图片

实验:

说明:1、把下面代码copy到eclipse中,编译烧写到,通过横竖屏切换,可验证原理中的Activity生命周期的流程图。
2、程序通过back返回键退出程序时,不回调onSaveInstanceState。

代码:

public class MainActivity extends Activity {    static final String EDITTEXT = "edittext";    static final String MCOUNT = "mcount";    private Button myButton;    int mCount = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        myButton = (Button) findViewById(R.id.myButton);        myButton.setText(Integer.toString(mCount));        myButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mCount++;                myButton.setText(Integer.toString(mCount));            }        });                Log.d("zxs", "/------ Activity onCreate ----------/");    }    @Override    protected void onStart() {        super.onStart();        Log.d("zxs", "/------ Activity onStart ----------/");    }    @Override    protected void onRestoreInstanceState(Bundle      savedInstanceState) {           super.onRestoreInstanceState(savedInstanceState);        if (savedInstanceState != null) {            mCount = (Integer) savedInstanceState.get(MCOUNT);            myButton.setText(Integer.toString(mCount));            Log.d("zxs", "/------ onRestoreInstanceState savedInstanceState != null ----------/");        } else {            Log.d("zxs", "/------ onRestoreInstanceState savedInstanceState == null ----------/");        }        Log.d("zxs", "/------ Activity onRestoreInstanceState ----------/");    }    @Override    protected void onResume() {        super.onResume();        Log.d("zxs", "/------ Activity onResume ----------/");    }    @Override    protected void onSaveInstanceState(Bundle savedInstanceState) {        super.onSaveInstanceState(savedInstanceState);        savedInstanceState.putInt(MCOUNT, mCount);        Log.d("zxs", "/------ Activity onSaveInstanceState ----------/");    }    @Override    protected void onStop() {        super.onStop();        Log.d("zxs", "/------ Activity onStop ----------/");    }    @Override    protected void onDestroy() {        super.onDestroy();        Log.d("zxs", "/------ Activity onDestroy ----------/");    }}

logcat:

01-22 17:00:54.393: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:00:54.403: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:00:54.403: D/zxs(28137): /—— Activity onResume ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onSaveInstanceState ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onStop ———-/
01-22 17:01:05.383: D/zxs(28137): /—— Activity onDestroy ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:01:06.103: D/zxs(28137): /—— onRestoreInstanceState savedInstanceState != null ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onRestoreInstanceState ———-/
01-22 17:01:06.103: D/zxs(28137): /—— Activity onResume ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onSaveInstanceState ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onStop ———-/
01-22 17:01:15.053: D/zxs(28137): /—— Activity onDestroy ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onCreate ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onStart ———-/
01-22 17:01:15.313: D/zxs(28137): /—— onRestoreInstanceState savedInstanceState != null ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onRestoreInstanceState ———-/
01-22 17:01:15.313: D/zxs(28137): /—— Activity onResume ———-/

参考:
1:http://my.oschina.net/u/556624/blog/271667:
2:http://developer.android.com/

更多相关文章

  1. 转:在Eclipse中查看Android SDK的源代码
  2. 使用Java代码在应用层获取Android系统属性
  3. android源代码分布结构
  4. Android初始化OpenGL ES,并且分析Renderer子线程原理
  5. 性能优化(9)-Android ANR在线监控原理
  6. Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcom
  7. Android系统手机重启与恢复出产设置源代码跟踪

随机推荐

  1. 适配器模式在开源代码中的应用
  2. 如何快速地看书?
  3. HashMap就是这么简单【源码剖析】
  4. 开始学习C语言
  5. Java集合总结【面试题+脑图】,将知识点一
  6. 装饰器模式在开源代码中的应用
  7. LinkedHashMap就这么简单【源码剖析】
  8. 外观模式在开源代码中的应用
  9. TreeMap就这么简单【源码剖析】
  10. 多线程三分钟就可以入个门了!