返回
监听 Activity 生命周期方式及案例详解
Android
2023-12-23 14:51:50
在 Android 开发中,Activity
生命周期管理是至关重要的。它允许您跟踪 Activity
的状态并相应地更新其界面和行为。本文将深入探讨监听 Activity
生命周期的方式,并提供使用 Fragment
和 registerActivityLifecycleCallbacks
的实际案例。
监听 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
监听生命周期