初探Activity生命周期

1. 理解几个重要的生命周期回调函数

android activity的生命周期是必须深入理解和掌握的,才能更好的开发出性能优良的app。

回调函数 适合处理的任务
onCreate() 初始化UI,及其他组件
onStart() 很快调用完进入Resume状态
onResume() Activity完全可见,可交互,有焦点
onPause() Activity被遮挡但可视,不可交互
onStop() 完全不可见,失去焦点,如进入别的Activity或APP
onDestroy() 资源回收,一般不用重写,大部分清理工作应该在onPause() & onStop()中完成
onRestart() 从Pause –> restart –> start –> resume
finish() 自己结束

将安卓各个生命周期理解为爬金字塔,可以很形象的记忆并理解。

Activity生命周期金字塔

2. Activity 的暂停与继续

其中三个回调函数可以长时间停留,与用户产生交互

  • onResume()
  • onStop()
  • onPause()

当一个Activity被部分遮挡,如弹出对话框,此时则会进入Pause状态。

如果被完全遮挡,则进入stop状态。

onPause()状态通常需要处理如下任务:

  • 停止一些消耗cpu的任务,如播放动画等
  • 保存一些需要保存的数据
  • 释放系统资源,如broadcast receivers ,传感器的引用(如摄像头,GPS,蓝牙等)一些耗电多的资源。

注意: 在onPause()中不要进行耗时任务,如数据库操作,这样会影响UI组件的显示效果。在onStop中处理耗时任务较为合适

3. Activity的 停止与重启

几个典型的Stop场景

  • 用户打开最近使用的APP,选择使用其他APP,此时便进入stop状态。

  • 从当前Activity跳转到另外一个Activity,则前一个进入stop状态,如果用户按back键返回,则重新restart。

Start / ReStart Activity
当Activity从后台stop变为前台可见时,系统回调onRestart(),onStart()方法。

注意:由于系统会保留处于Stop截断的Activity实例各种状态,一般的APP没太多必要重写 onRestart

4. 重建与恢复Activity

销毁

当系统因为内存过低等其他因素销毁了Activity(非正常销毁),尽管Activity Instance实例被回收,但是其状态被系统保存下来,以备恢复之需。

注意:旋转屏幕也会销毁与重建Activity,因为可能需要加载不同的适配资源。

恢复

Instance State存在一个key-value键值对集合中,即 Bundle对象。

注意:所有拥有Id的 View都会自动保存用户的输入,如edittext等。所以不必为此担心。


如果要存储Acivity的额外信息数据到bundle中,则需要重写onSaveInstanceState() 回调函数。

当Activity销毁时系统会自动传入一个bundle对象负责存储数据,当你需要用到之前的状态来重建Activity时,系统会传入刚才保存的bunlde对象到onCreate() & onRestoreInstanceState() 方法中。

恢复与重建过程示意
评论