这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战
前几篇中我反复提到过,Activity 的创建和回收是系统决定的,我们开发者只能在一些回调中自定义 Activity 的表现。是时候稍微深入一点了。
Activity 生命周期是什么
Activity 的生命周期是指一系列关于 Activity 状态变化的回调,从之前的 Demo 中可以知道,onCreate 是一个生命周期回调。
来看一张经典图:
Activity 的生命周期回调有 7 个,包括创建过程的三个:onCreate、onStart 和 onResume;销毁过程的三个:onPause、onStop 和 onDestroy;以及一个仅在重建过程中调用的 onRestart。
虽然看起来很多,但每个生命周期都有独特的作用,onCreate 和 onDestroy 都只会调用一次,可以做唯一的初始化;其他的生命周期伴随着状态的改变可能被反复调用,但一定是匹配出现的,比如 onStop 之后想再打开 Activity 就一定会经历 onStart。onResume 之后可以认定为 Activity 在显示了,但要注意此时 View 还没有绘制上去,Activity 只是 View 的载体,它本身不可见。
我们写点简单的代码验证一下:
代码只有输出 log,全部生命周期都输出了,截图只有一个部分。为了表现用户操作,还在 onBackPressed 加了 log 输出。
首先是正常 startActivity,注意最前面的时间间隔:
分支1:点击返回键,Activity 正常销毁了
分支2:点击 HOME 键,onStop 了但没销毁
分支2:再点击 App 图标让 Activity 回到前台
现在回到前面看状态转移图,是不是完全一致呢。
结
生命周期是非常重要的概念,会伴随 Android 开发者的每一天,优雅地处理生命周期是我们一生的追求(大概吧)。
生命周期也是跟 View 绘制息息相关的,开发者必须在生命周期之内进行 View 的处理,明天继续讲为什么 Activity 需要生命周期。