这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战
前言
作为四大组件之一Activity,生命周期对于页面来说具有重要作用。通过生命周期回调开发者可以对页面一些内容和功能做相应策略变化,例如页面启动创建视图,页面关闭销毁一些实例等。
生命周期
来自官网的生命周期图
-
onCreate
onCreate是系统首次创建Activity触发方法,也是Activity进入创建状态的过程。记得该逻辑只在Activity整个生命周期中只执行一次。因此该逻辑适用于初始化一些数据和默认值。 -
onRestart
Activity重新启动时的过程,一般是Activity从不可见状态重新变成可见状态,onPause和onStop被执行过后又重新启动。 -
onStart
onStart逻辑是在Activity正在被启动进入开始的状态,表示Activity从不可见状态切换到可见状态,但还没有到达用户可交互的状态。这个过程是比较短暂的因为马上Activity就会进入onResume -
onResume
onResume是Activity进入到恢复状态进入前台的过程,也是Activity可见的状态。此时应用处于前台并会一直保存该状态。直至Activity进入到onPause。 -
onPause
onPause表示Activity正在停止,用户将离开该Activity不再位于前台。此时对于开发者在这个逻辑下有必要释放掉一些系统资源来降低无用内存占用。在此逻辑下虽然Activity处于不可见状态但不代表Activity页面已经销毁,所以不建议在此做过重的高负荷操作。可以考虑将关闭必要操作在onStop中执行。 从Activity是否在前台来说,onResume和onPause是配对的。 -
onStop 该逻辑下
Activity进入停止状态,可以考虑将资源回收和数据保存工作在这执行但不要做太耗时的工作。虽然在onStop状态下Activity已经停止不可见,但Activity对象还是会驻留在内存一段时间,对象保留了状态和成员,当Activity恢复后会重新调用,从Bundle中重新恢复对象信息。从Activity是否可见来说,onStart和onStop是配对的。 -
onDestory 该逻辑下
Activity彻底销毁,也是Activity生命周期中最后一个回调。可以在此做一些回收和资源释放工作,也算是onStop的二次释放校验。onCreate和onDestory其实是成对出现的,一个Activity完整的生命周期只会调用一次“开始”和“结束”。
周期切换过程
- Activity正常启动流程
onCreate -> onStart -> onResume
- 打开新Activity或回到桌面
onPause->onStop
PS:需要知道启动新Activity这一过程中是旧Activity先执行onPause后新Actvity才启动的。
-
回到Activity
onRestart->onStart->onResume -
退出Activity
onPause->onStop->onDestory
特殊情况的生命周期
在特殊情况下Activity生命周期会发生异常,例如内存不足或是应用配置发生变化(横竖屏切换)等。
- 当横竖屏切换时
Activity会被销毁重新创建,默认情况下不做处理时其生命周期如下所示,Activity会执行onSaveInstaceState保存当前状态,等Activity恢复重新创建时会执行onRestoreInstanceState获取到onSaveInstaceState保存下来的Bundle数据。
flowchart TD
Activity --> onSaveInstaceState
onSaveInstaceState --> onCreate
Activity --> onCreate
onSaveInstaceState --> onDestory
onCreate --> onRestoreInstanceState
2.当内存不足时优先级较低的Activity被回收杀死,其数据恢复过程和1基本一样。但可以知悉一下Activity被杀死的优先级排序:前台Activity > 可见但非前台Activity(带弹窗,位于后台无法交互)> 后台Activity(被执行onStop的)
参考
- 了解 Activity 生命周期
- 《Android开发艺术探索》