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)
相关推荐
峥嵘life2 小时前
Android16 【CTS】CtsWindowManagerDeviceAnimations存在fail项
android·linux·学习
阿拉斯攀登3 小时前
第 7 篇 安卓驱动开发的灵魂:字符设备驱动框架,从原理到最简实战
android·驱动开发·rk3568·嵌入式驱动·安卓驱动
阿拉斯攀登3 小时前
第 1 篇 入坑不亏!瑞芯微 RK 平台 + 安卓驱动开发,小白全维度扫盲
android·驱动开发·rk3568·嵌入式驱动
Android系统攻城狮4 小时前
Android tinyalsa深度解析之pcm_params_get调用流程与实战(一百六十二)
android·pcm·tinyalsa·android hal·audio hal
zh路西法4 小时前
【C语言简明教程提纲】(四):结构体与文件定义和操作
android·c语言·redis
常利兵4 小时前
Jetpack Compose 1.8 新特性来袭,打造丝滑开发体验
android
牢七5 小时前
百家cms 审计 未完成
android·ide·android studio
hjxu20165 小时前
【 MySQL 速记5】插入
android·数据库·mysql
aq55356007 小时前
MySQL-触发器(TRIGGER)
android·数据库·mysql
一起搞IT吧8 小时前
Android功耗系列专题理论之十六:功耗不同阶段&不同模块分析说明
android·c++·智能手机·性能优化