返回

监听 Activity 生命周期方式及案例详解

Android

在 Android 开发中,Activity 生命周期管理是至关重要的。它允许您跟踪 Activity 的状态并相应地更新其界面和行为。本文将深入探讨监听 Activity 生命周期的方式,并提供使用 FragmentregisterActivityLifecycleCallbacks 的实际案例。

监听 Activity 生命周期的方式

有两种主要方式可以监听 Activity 生命周期:

1. 添加 Fragment

您可以通过添加一个 Fragment 并实现 LifecycleObserver 接口来监听 Activity 生命周期。LifecycleObserver 提供了以下方法:

  • @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
  • @OnLifecycleEvent(Lifecycle.Event.ON_START)
  • @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
  • @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
  • @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
  • @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)

通过实现这些方法,您可以分别在 Activity 的创建、启动、恢复、暂停、停止和销毁时执行代码。

2. registerActivityLifecycleCallbacks

另一种监听 Activity 生命周期的方式是使用 registerActivityLifecycleCallbacks 方法。它允许您注册一个 Application.ActivityLifecycleCallbacks 实现类,该类提供了以下方法:

  • onActivityCreated()
  • onActivityStarted()
  • onActivityResumed()
  • onActivityPaused()
  • onActivityStopped()
  • onActivityDestroyed()

Fragment 相比,registerActivityLifecycleCallbacks 的优势在于它可以监听所有 Activity 的生命周期,而不局限于一个特定的 Activity

案例演示

1. 使用 Fragment 监听 Activity 生命周期

class LifecycleFragment : Fragment(), LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun onCreate() {
        // 在 Activity 创建时执行
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onStart() {
        // 在 Activity 启动时执行
    }

    // 其他生命周期方法以此类推
}

2. 使用 registerActivityLifecycleCallbacks 监听 Activity 生命周期

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks {

            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
                // 在 Activity 创建时执行
            }

            // 其他生命周期方法以此类推
        })
    }
}

应用场景

  • Lifecycle: 跟踪 Activity 的生命周期状态,例如在 onResume() 中启动计时器,在 onPause() 中停止计时器。
  • Glide: 加载图像时管理内存,在 onStop() 中暂停图像加载,在 onResume() 中恢复图像加载。
  • PermissionX: 管理运行时权限请求,在 onResume() 中请求权限,在 onPause() 中取消请求。

优点和缺点

Fragment

优点:

  • 生命周期与宿主 Activity 绑定
  • 可以在特定 Activity 中轻松监听生命周期

缺点:

  • 不能监听所有 Activity 的生命周期
  • 增加了 Fragment 的复杂性

registerActivityLifecycleCallbacks

优点:

  • 可以监听所有 Activity 的生命周期
  • 实现更简单,无需添加 Fragment

缺点:

  • 生命周期与 Application 绑定,可能会导致内存泄漏
  • 难以针对特定 Activity 监听生命周期

SEO 关键词