LifecycleEventObserver和DefaultLifecycleObserver使用

一、接口定义

两者都来自 androidx.lifecycle,用于监听 LifecycleOwner(如 Activity、Fragment)的生命周期。

接口 包路径 核心方法
LifecycleEventObserver androidx.lifecycle.LifecycleEventObserver onStateChanged(owner, event),在一个方法里处理所有事件
DefaultLifecycleObserver androidx.lifecycle.DefaultLifecycleObserver onCreate/onStart/onResume/onPause/onStop/onDestroy,每个事件一个方法(带默认空实现)

二、LifecycleEventObserver

特点:只有一个回调,通过 Lifecycle.Event 区分事件。

复制代码
// Kotlin 示例
lifecycle.addObserver(object : LifecycleEventObserver {
    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        when (event) {
            Lifecycle.Event.ON_CREATE -> { /* 创建 */ }
            Lifecycle.Event.ON_START -> { /* 启动 */ }
            Lifecycle.Event.ON_RESUME -> { /* 恢复 */ }
            Lifecycle.Event.ON_PAUSE -> { /* 暂停 */ }
            Lifecycle.Event.ON_STOP -> { /* 停止 */ }
            Lifecycle.Event.ON_DESTROY -> { /* 销毁 */ }
            Lifecycle.Event.ON_ANY -> { /* 任意事件 */ }
        }
    }
})

● 适合:需要在一个地方统一处理多种事件、或要根据 event 做分支逻辑时使用。

● 注意:ON_ANY 会在每个事件时都触发,一般较少用。

三、DefaultLifecycleObserver

特点:每个生命周期阶段对应一个方法,只实现关心的即可,其余用默认空实现。

复制代码
// Kotlin 示例
lifecycle.addObserver(object : DefaultLifecycleObserver {
    override fun onCreate(owner: LifecycleOwner) {
        // 对应 ON_CREATE
    }
    override fun onStart(owner: LifecycleOwner) {
        // 对应 ON_START
    }
    override fun onResume(owner: LifecycleOwner) {
        // 对应 ON_RESUME
    }
    override fun onPause(owner: LifecycleOwner) {
        // 对应 ON_PAUSE
    }
    override fun onStop(owner: LifecycleOwner) {
        // 对应 ON_STOP
    }
    override fun onDestroy(owner: LifecycleOwner) {
        // 对应 ON_DESTROY
    }
})

● 适合:按「阶段」写逻辑,代码更直观,也便于只实现部分回调(如只关心 onResume/onPause)。

● 官方在 Java 8+ 和 lifecycle 2.4.0+ 下更推荐用这个替代旧的 @OnLifecycleEvent 注解。

四、对比与选择

对比项 LifecycleEventObserver DefaultLifecycleObserver
写法 一个方法 + when(event) 多个方法,按阶段实现
可读性 事件集中,需自己分支 方法名即含义,更清晰
灵活性 方便统一处理、自定义分支 按阶段拆分,结构固定
推荐场景 需要根据 event 做统一分发、或逻辑集中在一处 常规生命周期回调、只关心部分阶段

简单选择建议:

● 只关心「创建、启动、恢复、暂停、停止、销毁」中的某几个阶段 → 用 DefaultLifecycleObserver。

● 需要在一个回调里根据 Lifecycle.Event 做统一处理或复杂分支 → 用 LifecycleEventObserver。

五、注册方式(两者相同)

复制代码
// Activity / Fragment 中
lifecycle.addObserver(myObserver)

移除观察者(避免内存泄漏):

复制代码
lifecycle.removeObserver(myObserver)
相关推荐
、BeYourself2 小时前
Intent :跳转与数据传递的正确打开方式
android·android-studio
灵感菇_2 小时前
Android 列表控件全面解析:ListView 与 RecyclerView
android·ui
2601_949809593 小时前
flutter_for_openharmony家庭相册app实战+照片详情实现
android·java·flutter
fundroid3 小时前
Kotlin 泛型进阶:in、out 与 reified 实战
android·开发语言·kotlin
Android系统攻城狮3 小时前
Android tinyalsa深度解析之pcm_open调用流程与实战(一百零三)
android·pcm·tinyalsa·音频进阶·音频性能实战·android hal
2501_944448003 小时前
Flutter for OpenHarmony衣橱管家App实战:意见反馈功能实现
android·javascript·flutter
风流倜傥唐伯虎3 小时前
./gradlew assembleDebug和gradle build区别
android·android studio
有位神秘人3 小时前
Android中获取当前设备的宽高与屏幕密度等数据的工具类
android
那年我七岁3 小时前
android ndk c++ 绘制图片方式
android·c++·python