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)
相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui