Activity 是 Android 应用的基本组件之一,代表用户界面中的一个屏幕。理解 Activity 的生命周期对于开发稳定、高效的 Android 应用至关重要。本章节将深入讲解 Activity 的生命周期方法、生命周期流程以及如何在实际开发中正确管理 Activity 的状态。

4.1 Activity 简介

  • Activity 的定义

    • Activity 是 Android 应用中用于与用户交互的组件,每个 Activity 通常代表一个用户界面窗口。
    • 应用通常由多个 Activity 组成,例如登录页、主界面、设置页等。
  • Activity 的作用

    • 管理用户界面。
    • 处理用户交互事件。
    • 与其他组件进行通信。

4.2 Activity 生命周期方法

Activity 生命周期由一系列回调方法组成,这些方法在 Activity 的不同状态之间切换时被系统调用。理解这些方法对于正确管理 Activity 的状态至关重要。

  • onCreate(Bundle savedInstanceState):

    • Activity 被创建时调用。
    • 用于初始化 Activity,例如设置布局、初始化视图、绑定数据等。
    • savedInstanceState 参数用于保存和恢复 Activity 的状态。
  • onStart():

    • Activity 对用户可见时调用。
    • 紧随 onCreate()onRestart() 之后调用。
  • onResume():

    • Activity 与用户交互时调用。
    • Activity 处于前台,可以接收用户输入。
  • onPause():

    • Activity 暂停时调用。
    • 当 Activity 部分不可见时调用,例如打开新的 Activity 或弹出对话框。
    • 释放不需要的资源,例如停止动画、暂停视频播放等。
  • onStop():

    • Activity 停止时调用。
    • Activity 完全不可见时调用。
    • 释放不需要的资源,例如停止网络请求、释放内存等。
  • onRestart():

    • Activity 从停止状态重新启动时调用。
    • 紧随 onStop() 之后调用。
  • onDestroy():

    • Activity 被销毁时调用。
    • 释放所有资源,例如取消注册广播接收器、关闭数据库连接等。

4.3 Activity 生命周期流程

Activity 的生命周期流程可以分为以下几个阶段:

  1. 启动 Activity:

    • onCreate() -> onStart() -> onResume()
  2. 切换到后台:

    • 当前 Activity 调用 onPause(),然后新的 Activity 调用 onCreate(), onStart(), onResume()
    • 当前 Activity 调用 onStop()
  3. 返回前台:

    • 如果 Activity 没有被销毁,则调用 onRestart(), onStart(), onResume()
    • 如果 Activity 被销毁,则重新调用 onCreate(), onStart(), onResume()
  4. 销毁 Activity:

    • onPause() -> onStop() -> onDestroy()

4.4 Activity 生命周期示例

以下是一个简单的 Activity 示例,演示了生命周期方法的调用顺序:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.d("ActivityLifecycle", "onCreate")
    }

    override fun onStart() {
        super.onStart()
        Log.d("ActivityLifecycle", "onStart")
    }

    override fun onResume() {
        super.onResume()
        Log.d("ActivityLifecycle", "onResume")
    }

    override fun onPause() {
        super.onPause()
        Log.d("ActivityLifecycle", "onPause")
    }

    override fun onStop() {
        super.onStop()
        Log.d("ActivityLifecycle", "onStop")
    }

    override fun onRestart() {
        super.onRestart()
        Log.d("ActivityLifecycle", "onRestart")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("ActivityLifecycle", "onDestroy")
    }
}
  • 启动 Activity:

    • onCreate() -> onStart() -> onResume()
  • 切换到后台:

    • onPause() -> onStop()
  • 返回前台:

    • onRestart() -> onStart() -> onResume()
  • 销毁 Activity:

    • onPause() -> onStop() -> onDestroy()

4.5 Activity 状态保存与恢复

  • 状态保存:

    • onSaveInstanceState() 方法中保存 Activity 的状态。
      override fun onSaveInstanceState(outState: Bundle) {
          super.onSaveInstanceState(outState)
          outState.putString("key", "value")
      }
      
  • 状态恢复:

    • onCreate() 方法中恢复 Activity 的状态。
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          if (savedInstanceState != null) {
              val value = savedInstanceState.getString("key")
          }
      }
      

4.6 Activity 任务与回退栈

  • 任务 (Task):

    • 一个任务是一组 Activity 的集合,代表用户执行的一个工作单元。
    • 例如,打开邮件应用 -> 查看邮件 -> 回复邮件,这三个 Activity 属于同一个任务。
  • 回退栈 (Back Stack):

    • Activity 按照打开顺序被压入回退栈中。
    • 用户按返回键时,Activity 从回退栈中弹出。
  • 管理任务:

    • 使用 Intent 标志位管理任务,例如 FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP 等。

4.7 Activity 生命周期与配置变化

  • 配置变化:

    • 例如屏幕旋转、语言切换等,会导致 Activity 销毁并重新创建。
  • 保存与恢复状态:

    • 使用 onSaveInstanceState()onRestoreInstanceState() 方法保存和恢复状态。
    • 或者使用 ViewModel 来管理 UI 相关数据。

4.8 实战案例

  1. 案例一:日志记录 Activity 生命周期

    • 在 Activity 的生命周期方法中添加日志输出。
    • 运行应用,观察日志输出,理解 Activity 生命周期流程。
  2. 案例二:保存与恢复 Activity 状态

    • 在 Activity 中保存文本输入框的内容。
    • 旋转屏幕,观察状态是否正确恢复。

4.9 课后作业

  1. 任务一:观察 Activity 生命周期

    • 创建一个新的 Activity,在生命周期方法中添加日志输出。
    • 运行应用,执行不同的操作,例如启动 Activity、切换到后台、返回前台、销毁 Activity,观察日志输出,理解 Activity 生命周期流程。
  2. 任务二:管理 Activity 状态

    • 在 Activity 中添加一个文本输入框。
    • onSaveInstanceState() 方法中保存文本输入框的内容。
    • onCreate() 方法中恢复文本输入框的内容。
    • 旋转屏幕,观察状态是否正确恢复。
  3. 任务三:管理任务与回退栈

    • 创建两个 Activity,ActivityA 和 ActivityB。
    • 从 ActivityA 打开 ActivityB。
    • 使用不同的 Intent 标志位,例如 FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP,观察 Activity 任务和回退栈的变化。

通过本章节的学习,学员将能够理解 Activity 的生命周期方法,掌握 Activity 状态保存与恢复的方法,并能够管理 Activity 任务与回退栈,为开发稳定的 Android 应用打下基础。

作者简介

前腾讯电子签的前端负责人,现 whentimes tech CTO,专注于前端技术的大咖一枚!一路走来,从小屏到大屏,从 Web 到移动,什么前端难题都见过。热衷于用技术打磨产品,带领团队把复杂的事情做到极简,体验做到极致。喜欢探索新技术,也爱分享一些实战经验,帮助大家少走弯路!

温馨提示:可搜老码小张公号联系导师

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部