.本文将对 Activity 的生命周期相关的进行一些总结 :
Activity 是由 TaskStack 进行管理,当一个应用启动时,系统会为其创建一个对应的 TaskStack,当新的Activity 被打开,就被压入栈顶,此时前一个 Activity位于当前 Activity 的底部。只有位于栈顶的 Activity 才会被显示到窗口中。
Activity 界面的 4 种状态 :
运行状态 : 可见同时可以操作
暂停状态 : 可见但是不可操作
停止状态 : 不可见,但其对象存在
死亡状态 : 对象不存在
Activity 生命周期的流程图 :
重点关注以下三个方法
onCreate() : 用于加载布局和初始化工作
onResume() : 经历此方法,才能进入运行状态
onDestory() : 在对象死亡之前,做一些收尾清理工作
Activity 生命周期方法的调用(使用Log打印日志) :
1). 开始运行 (或从停止到开始) :
E/TAG: MainActivity()
E/TAG: onCreate
E/TAG: onStart
E/TAG: onResume
2). 运行 --> 死亡
E/TAG: onPause
E/TAG: onStop
E/TAG: onDestory
3). 运行 --> 停止
E/TAG: onPause
E/TAG: onStop
4). 停止 --> 运行
E/TAG: onRestart
E/TAG: onStart
E/TAG: onResume
5). 运行 --> 暂停
E/TAG: onPause
6). 暂停 --> 运行
E/TAG: onResume
以下对 Activity 生命周期方法的调用进行测试(通过使用Log打印日志进行测试) :
1. A 页面跳转到 B 页面,点击返回,此过程的生命周期 :
1.1 B 页面完全覆盖 A 页面
A 跳转 B 的生命周期方法执行顺序 :
onPause(A) --> onCreate(B) --> onStart(B) --> onResume(B) --> onStop(A)
B 页面点击返回的生命周期执行顺序 :
onPause(B) --> onRestart(A) --> onStart(A) --> onResume(A) --> onStop(B) --> onDestroy(B)
1.2 B 页面不完全覆盖 A 页面
A 跳转 B 的生命周期方法执行顺序 :
onPause(A) --> onCreate(B) --> onStart(B) --> onResume(B)
B 页面点击返回的生命周期执行顺序 :
onPause(B) --> onResume(A) --> onStop(B) --> onDestroy(B)
2. 横竖屏切换过程的生命周期 :
横竖屏切换会导致生命周期方法的重新执行 :
onPause()--> onStop() --> onDestroy() --> onRestart() --> onStart() --> onResume()
如何屏蔽这种重新执行?
找到 Manifest.xml , 在想屏蔽的已注册的 Activity 中加上 android:configChanges="keyboardHidden|screenSize|orientation"。
这个属性的参数可以自行指定。