生命周期
Activity生命周期.jpg方法 | 调用时机 | 说明 |
---|---|---|
onCreate | 在Activity第一次被创建时 | 在此完成各种初始化操作 |
onStart | 在Activity即将可见时 | |
onResume | 在Activity准备好与用户交互 | |
onPause | 在用户跳转另一个Activity或可见但不可交互时 | 此处不能进行一些耗时操作,因为会影响新Activity的显示 |
onStop | 在Activity完全不可见时 | |
onDestory | 在Activity被销毁之前 | 在此进行一些回收工作和资源释放 |
onRestart | 在活动被重新启动时 | |
onNewIntent | 跳转自身 | 当Activity启动模式不为standard时存在复用可能 |
onSaveInstanceState | 在onStop之前调用 | |
onRestoreInstanceState | 在Activity被异常结束时的条件下,在onResume前调用 | Activity被异常结束时,该方法会被执行,用于取出在onSaveInstanceState中存储的数据 |
常见执行
情形ActivityA,B | A,B执行顺序 |
---|---|
第一次启动ActivityA | onCreate(A)>onStart(A)>onResume(A) |
复用启动ActivityA | onNewIntent(A)>onResume(A) |
ActivityA启动B | onPause(A)>onCreate(B)>onStart(B)>onResume(B)>onStop(A) 若B为透明使得A仍然可见则onStop(A)将不执行 |
ActiviyB返回A | onPause(B)>onRestart(A)>onStart(A)>onResume(A)>onStop(B)>onDestory(B) |
ActivityA在异常结束后启动 | onCreate(A)>onStart>(A)>onRestoreInstanceState(A)>onResume(A) |
... |
补充说明
- Activity的onDestory方法执行可以通过判断此时的Activity是压栈还是出栈来判断,跳转新Activity时旧Activity从栈顶被压入栈中,此时仍存在被复用可能因此不会执行onDestory方法,但返回上一个Activity则是将Activity从栈顶移除栈,此时Activity进入销毁状态,则会执行onDestory方法
- onSaveInstanceState 方法会在onStop之前调用且每次都执行,而onRestoreInstanceState方法则有Activity异常结束的条件才会执行,在这里我理解为Activity的销毁存在不确定性,例如跳转新Activity时,旧Activity会执行到onstop方法,此时应用切换横竖屏再返回,如果不是onSaveInstanceState 每次都执行则会遗失数据。
- onSaveInstanceState 数据通过bundle来保存,取用则可以在onCreate与onRestoreInstanceState 中取得,但onCreate中需要判空来确认是第一次创建还是重建
- Activity异常结束的情况
- 配置被改变
- 常用配置 orentation(屏幕方向)、screenSize(屏幕尺寸)、locale(系统语言环境)...
- 避免重启
在Activity的清单文件中声明android:configChanges属性,之后在对应Activity发生配置改变时直接调用onConfigurationChanged方法。
- 系统内存不足,低优先级的Activity被回收
优先级:前台正在交互>可见但不可交互>后台Activity
- 配置被改变
网友评论