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)
相关推荐
CYY951 天前
Compose 入门篇
android·kotlin
杉氧1 天前
Compose 时代的 MVI 架构:如何用单向数据流驱动复杂 UI?
android·架构·android jetpack
杉氧1 天前
Modifier 的艺术:为什么链式调用的顺序决定了UI 的生命周期?
android·架构·android jetpack
李斯维1 天前
腾讯 XLog 日志框架 Android 端接入
android·android studio·android jetpack
黄林晴1 天前
Kotlin Toolchain 0.11 发布:Amper 正式更名,统一 kotlin 命令
android·kotlin
雨白1 天前
C语言基础快速入门与指针初探
android
Exploring1 天前
避坑指南:升级 AGP 8.0+ 导致第三方 SDK 编译崩溃的完美解决方案
android
石山岭2 天前
自己动手写了一个 Android 虚拟定位 App:GPSSimulate 技术实
android·前端
杉氧2 天前
副作用 (Side Effects) 全攻略:如何像大师一样掌控 Composable 的生命周期?
android·架构·android jetpack
Kapaseker2 天前
Kotlin Toolchain 0.11 发布:主要是把 Amper 干没了
android·kotlin