正常情况下的Activity生命周期.
- onCreate:第一个方法,加载布局资源,初始化数据
- onStart:在后台,看不到,即将显示,onRestart之后会调用这个方法
- onResume:在前台,和onStart同样可见,不同的是onStart在后台,onResume在前台
- onPause:正在停止,正常情况下,onStop紧接着马上被调用.特殊情况:很快速的回到当前activity(onPause->onResume),很极端.在这个方法内可以做一些存储数据,停止动画等释放资源的动作,但是也不能太耗时,不然会影响新activity的显示(用户看来就是卡顿)
- onStop: 即将停止.稍微重量级的回收工作,同样不能太好使.
- onDestory: activity被销毁.生命周期的最后一个方法.
- 用户回到已启动的activity:正常情况下,onStop->onRestart->onStart->onResume;如果高优先级的应用需要内存,Activity被杀死回收再回到该界面:onStop->onCreate->onStart->onResume,不经过onRestart,资源被回收了.
- activity第一次启动:onCreate->onStart->onResume
- 打开新activity或回到桌面:onPause->onStop ;特殊情况:当activity为透明主题时,不会执行onStop.
- 点返回键:onPause->onStop->onDestory
- 配对:onCreate,onDestory,只执行一次;onStart,onStop:设备亮屏,息屏;onResume,onPause:是否在前台.
- onStart onResume, onPause,onStop的区别:含义不同,onStart,onStop是同activity是否可见角度回调.onResume,onPause是从是否在前台角度回调.
- activity的启动过程:Instrumentation(处理activity启动请求,通过Binder向ActivityManagerService发请求),ActivityThread(同步activity状态的线程).AMS(在ActivityThread中维护ActivityStack)
- 问题:A启动B,A的onPause,以及B的onResume,谁先执行? 答:在ActivityStack的resumeTopActivity方法中,we need start pausing the current activity so the one can resumed. 新activity启动前,栈顶activity需要onPause之后,新activity才能启动.onPause之后最终会在ActivityStackSupervisor中realStartActivityLocked中真正启动新acitivity.
- A启动B: A onPause --> B onCreate --> B onStart--> B onResume --> A onStop. 由此可以看出,不要再onPause中执行重量级耗时操作,应该尽量在onStop中做操作,使新Activity尽快显示并切换到前台.
《android艺术探索》读书笔记