App 生命周期

Android 应用 中,生命周期是指应用从启动到退出,以及在系统和用户交互时状态的变化过程。理解应用生命周期对于优化资源管理、响应用户行为和系统事件至关重要。


1. 应用生命周期与组件的关系

Android 应用的生命周期主要由以下核心组件管理:

  • Application:应用的全局生命周期。

  • Activity:界面组件的生命周期,直接体现用户与应用的交互。

  • Service:后台运行组件的生命周期。

  • BroadcastReceiver:广播接收组件,生命周期通常极短。

  • ContentProvider:负责数据共享,生命周期由系统管理。

其中,ApplicationActivity 是应用生命周期管理的关键部分。


2. 应用生命周期状态

应用的生命周期状态与系统内存管理和用户操作密切相关,可分为以下几种:

前台运行(Foreground)

  • 应用的一个或多个 Activity 位于前台,与用户直接交互。

  • 应用被视为“活跃状态”,优先级最高,系统不会回收。

后台运行(Background)

  • 应用的所有 Activity 不再可见(如用户切换到其他应用)。

  • 如果系统内存不足,后台应用可能会被杀死。

被回收(Terminated/Killed)

  • 应用的进程被系统回收。

  • 系统可能在后台杀死应用以释放内存。


3. Application 的生命周期

Application 是整个应用的入口,其生命周期由系统管理。

关键方法:

  1. onCreate()

    • 在应用进程启动时调用(只调用一次)。

    • 用于初始化全局状态,如依赖注入框架、第三方库。

  2. onTerminate()

    • 在模拟环境中调用(如测试)。在实际环境中不会被调用。

  3. onLowMemory()

    • 系统内存不足时调用,用于提示释放资源。

  4. onTrimMemory()

    • 应用的内存清理状态更加精细化。


4. Activity 的生命周期

Activity 是与用户直接交互的组件,其生命周期由多个回调方法管理。典型的生命周期如下:

完整生命周期方法:

  1. onCreate()

    • 初始化界面、绑定数据。

    • 必须实现。

  2. onStart()

    • Activity 对用户可见,但无法交互。

  3. onResume()

    • Activity 进入前台,用户可以交互。

  4. onPause()

    • Activity 失去焦点(如打开对话框)。

    • 用于保存临时状态或暂停耗时操作。

  5. onStop()

    • Activity 对用户完全不可见。

  6. onDestroy()

    • Activity 被销毁时调用,用于清理资源。

  7. onRestart()

    • 从不可见状态重新进入活跃状态。


5. 应用生命周期的状态切换

用户操作/事件

Application 状态

Activity 状态

启动应用

创建进程

onCreate()onStart()onResume()

按下 Home 键

保持后台

onPause()onStop()

切回应用

保持后台 → 前台

onRestart()onStart()onResume()

切换到其他 Activity

保持后台

当前 Activity:onPause()onStop() 新 Activity:onCreate()onStart()onResume()

应用被系统杀死

被回收

无生命周期回调

退出应用(销毁所有 Activity)

销毁进程

onPause()onStop()onDestroy()


6. 应用生命周期的特殊情况

1. 系统回收与重新创建

  • 当系统内存不足时,应用进程可能被杀死。

  • 如果用户重新返回应用,Activity 将通过 onCreate() 和存储的 savedInstanceState 恢复状态。

2. 配置更改(如旋转屏幕)

  • 系统默认会销毁当前 Activity,并重新创建。

  • 开发者可以通过 onSaveInstanceState() 保存临时数据,或在清单文件中指定 android:configChanges 选项避免重建。


7. 处理生命周期的最佳实践

  1. 资源管理:

    • onCreate() 中初始化资源,在 onDestroy() 中释放资源。

    • onPause()onStop() 中暂停长时间运行的任务。

  2. 保存状态:

    • 使用 onSaveInstanceState() 保存临时状态,确保在意外销毁时能恢复。

  3. 避免内存泄漏:

    • 避免持有对 Context 的静态引用。

    • onDestroy() 中解除可能导致内存泄漏的引用(如 HandlerThread)。

  4. 高效响应系统事件:

    • onLowMemory()onTrimMemory() 中释放非必要资源。


总结

Android 应用生命周期由系统全面管理,涉及到进程的启动、后台切换、资源回收等。理解这些机制可以帮助开发者更好地优化资源使用,提升用户体验。对于常见的应用场景,如后台运行、数据保存等,需要合理设计生命周期方法来应对不同状态的切换和恢复。

Last updated