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)
相关推荐
_李小白2 小时前
【android opencv学习笔记】Day 2: Mat类(图片数据结构体)
android·opencv·学习
jinanwuhuaguo3 小时前
OpenClaw工程解剖——RAG、向量织构与“记忆宫殿”的索引拓扑学(第十三篇)
android·开发语言·人工智能·kotlin·拓扑学·openclaw
小怪吴吴5 小时前
idea 开发Android
android·java·intellij-idea
xiaoyan20156 小时前
2026爆肝!Flutter3.41纯手撸微信聊天APP原生应用
android·flutter·dart
jinanwuhuaguo7 小时前
OpenClaw协议霸权——从 MCP 标准到意图封建化的政治经济学(第十八篇)
android·人工智能·kotlin·拓扑学·openclaw
撩得Android一次心动7 小时前
Android Room 数据库详解【源码篇】
android·数据库·android jetpack·room
TO_ZRG8 小时前
Android WorkManager 完全入门指南
android
a8a3029 小时前
Laravel 6.x新特性全解析
android
用户游民9 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java
Lyyaoo.9 小时前
TreadLocal和TreadLocalMap
android·java·redis