• 实验环境
  • 实验方法
  • 关键代码
  • 实验结果

本文探究两个 Activity 相互跳转生命周期方法的执行顺序。

实验环境

compileSdkVersion 25
buildToolsVersion “26.0.0”
minSdkVersion 15
targetSdkVersion 25
compile ‘com.android.support:appcompat-v7:25.3.1’

实验方法

新建两个 Activity:MainActivity 和 Main2Activity,并在两个 Activity 的生命周期方法中打印 log。从 MainActivity 跳转到 Main2Activity,查看 log 日志。

关键代码

        findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                startActivity(new Intent(MainActivity.this, Main2Activity.class));            }        });

实验结果

打开 MainActivity:

07-07 14:42:46.366 15625-15625/com.dp.activitylifecycledemo D/MainActivity: onCreate07-07 14:42:46.374 15625-15625/com.dp.activitylifecycledemo D/MainActivity: onStart07-07 14:42:46.379 15625-15625/com.dp.activitylifecycledemo D/MainActivity: onResume

然后跳转:

07-07 14:44:36.107 15625-15625/com.dp.activitylifecycledemo D/MainActivity: onPause07-07 14:44:36.120 15625-15625/com.dp.activitylifecycledemo D/Main2Activity: onCreate07-07 14:44:36.128 15625-15625/com.dp.activitylifecycledemo D/Main2Activity: onStart07-07 14:44:36.130 15625-15625/com.dp.activitylifecycledemo D/Main2Activity: onResume07-07 14:44:36.523 15625-15625/com.dp.activitylifecycledemo D/MainActivity: onStop

可以看出,跳转动作发出后,先走 MainActivity#onPause(),然后依次走 Main2Activity 的 onCreate()、onStart()、onResume(),最后走 MainActivity#onStop()。

按返回键,返回到 MainActivity:

07-07 14:47:27.965 15625-15625/com.dp.activitylifecycledemo D/Main2Activity: onPause07-07 14:47:28.014 15625-15625/com.dp.activitylifecycledemo D/MainActivity: onRestart07-07 14:47:28.015 15625-15625/com.dp.activitylifecycledemo D/MainActivity: onStart07-07 14:47:28.015 15625-15625/com.dp.activitylifecycledemo D/MainActivity: onResume07-07 14:47:28.334 15625-15625/com.dp.activitylifecycledemo D/Main2Activity: onStop07-07 14:47:28.334 15625-15625/com.dp.activitylifecycledemo D/Main2Activity: onDestroy

先执行 Main2Activity#onPause(),然后执行 MainActivity 的 onRestart()、onStart()、onResume(),再执行 Main2Activity 的 onStop、onDestroy()。

总结以上,得下图:

顺便,记录下模拟 Activity 被系统回收的方法。打开下图中的选项,置于后台的页面就立即被回收:

另外,onSaveInstanceState() 方法里面应该记录的是离开页面时的 UI 状态信息,比如被选中的 tab 等。Intent 里面的参数信息是会被系统完整保存的,无需在 onSaveInstanceState() 中做额外记录。

更多相关文章

  1. Android时出现Error 41的解决方法
  2. Android(安卓)获取 PackageInfo 引发 Crash 填坑
  3. 之View state changes(视图状态改变)
  4. android 反射机制
  5. Android(安卓)PopupWindow Dialog 关于 is your activity runnin
  6. gradle自动修改android版本号的方法,取java静态变量重命名apk文件
  7. Android(安卓)BaseAdapter与ListView的使用
  8. Android滑动手势侦测方法
  9. Android(安卓)OpenCV 旋转图像

随机推荐

  1. 为什么移动端跨平台开发不靠谱?
  2. Android语音识别的具体实现实例特点分析
  3. Android中TextView首行缩进处理办法
  4. Android(安卓)使用LeakCanary 检测内存泄
  5. Android(安卓)Studio 进阶详细配置
  6. 不是我不写博客,是我不敢写
  7. Android自动化测试之Monkeyrunner从零开
  8. Android日记之2012/02/08——浅谈Timer
  9. 使用Intent Filter来响应隐式Intent
  10. Android(安卓)Jni用bitmap形式实现Image