Activity 类提供六个核心回调:onCreate()、onStart()、onResume()、onPause()、onStop() 和 onDestroy().
这里,重新从官网介绍的设计再认识一下.
注: Activity 的调度和执行,是由 ActivityThread 负责管理的,即由它发起调度.
参考之前的文章:ActivityThread 中一些常用的知识点记录
1. onCreate() 已创建
必须实现此回调,它会在系统首次创建 Activity 时触发。
使用setContentView() 来指定 XML 布局文件 或 指定 View.
onSaveInstanceState 在临时销毁前保存, onRestoreInstanceState在onCreate后调用.
2. onStart() 已开始
使 Activity 对用户可见,因为应用会为 Activity 进入前台并支持互动做准备。
3. onResume() 已恢复
这是应用与用户互动的状态。应用会一直保持这种状态,直到某些事件发生,让焦点远离应用.
在之前的分析可知,该方法是由ActivityThread 调用的。
在 onResume 完成返回后,会将 Activity 的 DecorView 添加到 Window 中.
可以参考:Android Framework 之 Window / WindowManager (4) - Activity的 Window 创建过程 源码分析
4. onPause() 已暂停
系统将此方法视为用户将要离开 Activity 的第一个标志(尽管这并不总是意味着 Activity 会被销毁).
activity 进入此状态的原因有很多。例如:
(1)如 onResume() 部分所述,某个事件会中断应用执行。这是最常见的情况。
(2)在 Android 7.0(API 级别 24)或更高版本中,有多个应用在多窗口模式下运行。
无论何时,都只有一个应用(窗口)可以拥有焦点,因此系统会暂停所有其他应用。
(3)有新的半透明 Activity(例如对话框)处于开启状态。只要 Activity 仍然部分可见但并未处于焦点之中,它便会一直暂停。
如果处于多窗口模式,“已暂停”的 Activity 仍完全可见。
应该考虑使用 onStop() 而非 onPause() 来完全释放或调整与界面相关的资源和操作,以便更好地支持多窗口模式。
执行非常简单,而且不一定要有足够的时间来执行保存操作。
因此,不应使用 onPause() 来保存应用或用户数据、进行网络调用或执行数据库事务。
因为在该方法完成之前,此类工作可能无法完成。相反,应在 onStop() 期间执行高负载的关闭操作。
5. onStop() 已停止
Activity 不再对用户可见.
应用应释放或调整在应用对用户不可见时的 无用资源。
例如,应用可以暂停动画效果,或从 精确位置 更新切换到 粗略位置更新
还应使用 onStop() 执行 CPU 相对密集的关闭操作。
Activity 进入“已停止”状态时,Activity 对象会继续驻留在内存中:
该对象将维护所有状态和成员信息,但不会附加到 WindowManager。
Activity 恢复后,Activity 会重新调用这些信息。
6. onDestroy() 销毁
销毁 Activity 之前,系统会先调用 onDestroy()。
系统调用此回调的原因如下:
(1)Activity 即将结束(由于用户彻底关闭 Activity 或由于系统为 Activity 调用 finish()),或者
(2)由于配置变更(例如设备旋转或多窗口模式),系统暂时销毁 Activity
可以使用 isFinishing() 区分是否为临时销毁.
7. 六个核心生命周期方法 关系图
参考文献:
https://developer.android.com/guide/components/activities/activity-lifecycle?hl=zh-cn#onresume
网友评论