UnPeek-LiveData的使用:

一、它到底是什么?

解决原生 LiveData 所有 BUG 的安全版 LiveData解决 3 个致命痛点:

  1. 粘性事件(先发送后订阅,会收到旧消息)
  2. 页面旋转重建 → 消息重复触发
  3. 事件多次消费(弹窗 / 跳转 / Toast 重复执行)

7.3.0 是官方最终稳定版,不再更新。

二、依赖(直接复制)

gradle

arduino 复制代码
implementation "com.kunminx.arch:unpeek-livedata:7.3.0"

三、7.3.0 核心 4 个类(必须记住)

表格

类名 作用 场景
UnPeekLiveData 页面内安全事件 ViewModel → Activity/Fragment
UnPeekMutableLiveData 可修改的 UnPeek 外部可 setValue
SharedUnPeekLiveData 跨页面全局事件 Activity ↔ Fragment ↔ Activity
UnPeekBus 全局事件总线 替代 EventBus、LocalBroadcast

四、最常用:页面内事件(ViewModel + View)

1. ViewModel 中定义

kotlin

kotlin 复制代码
import androidx.lifecycle.ViewModel
import com.kunminx.arch.lifecycle.UnPeekLiveData

class MyViewModel : ViewModel() {

    // 定义:不可变,只内部修改
    val uiEvent = UnPeekLiveData<String>()

    // 发送事件
    fun test() {
        uiEvent.setValue("页面事件:显示Toast")
    }
}

2. Activity/Fragment 观察

kotlin

javascript 复制代码
viewModel.uiEvent.observe(this) { msg ->
    // 安全事件
    // 不会粘性、不会重建重复、只会执行一次
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
}

特点:

  • 无粘性
  • 旋转屏幕不重复回调
  • 一条事件只消费一次
  • 完全生命周期安全

五、可变版 UnPeekMutableLiveData

允许外部直接 setValue

kotlin

kotlin 复制代码
val refreshEvent = UnPeekMutableLiveData<Boolean>()

// 使用
viewModel.refreshEvent.setValue(true)

六、跨页面通信(神器:SharedUnPeekLiveData)

用于:A 页面发送 → B 页面接收

1. 创建全局单例(管理所有共享事件)

kotlin

ini 复制代码
object GlobalEvent {
    val loginEvent = SharedUnPeekLiveData<Boolean>()
    val userInfo = SharedUnPeekLiveData<User>()
}

2. 发送页面

kotlin

arduino 复制代码
GlobalEvent.loginEvent.setValue(true)

3. 接收页面(任何界面)

kotlin

javascript 复制代码
GlobalEvent.loginEvent.observe(this) { isLogin ->
    // 处理登录
}

特点:

  • 跨页面、跨 ViewModel
  • 无粘性
  • 无内存泄漏
  • 无需反注册

七、全局事件总线(替代 EventBus):UnPeekBus

7.3.0 新增,极简事件总线

发送

kotlin

arduino 复制代码
UnPeekBus.send("key_home_refresh", true)

接收

kotlin

kotlin 复制代码
UnPeekBus.observe<Boolean>(this, "key_home_refresh") {
    // 刷新首页
}

完全替代 EventBus、LocalBroadcastManager、RxBus


八、7.3.0 最重要特性(必看)

  1. 真正无粘性
  2. 屏幕旋转不重复回调
  3. 一条事件只会被消费一次
  4. 生命周期安全
  5. 无反射、无内存泄漏、无需解绑
  6. 100% 兼容原生 LiveData 写法
  7. 支持 Kotlin & Java

九、最关键使用规则(非常重要)

1. 状态数据 用 LiveData

列表、文字、UI 显示状态(可恢复)

2. 一次性事件 用 UnPeekLiveData

跳转、弹窗、Toast、提示、事件(只执行一次)

3. 跨页面 用 SharedUnPeekLiveData / UnPeekBus


十、和原生 LiveData 对比(一眼看懂)

表格

场景 普通 LiveData UnPeekLiveData 7.3.0
先发送后订阅 会收到旧消息(粘性) 不会
屏幕旋转 重复回调 不回调
事件只执行一次 不保证 保证
内存安全 一般 安全
跨页面 不支持 支持

十一、最终总结(架构必背)

UnPeekLiveData 7.3.0 = 现代 Android 架构 官方标准事件解决方案

  • 页面内事件 → UnPeekLiveData

  • 跨页面事件 → SharedUnPeekLiveData

  • 全局简单事件 → UnPeekBus

相关推荐
我就是马云飞2 小时前
我废了!大厂10年的我面了20家公司,面试官让我回去等通知!
android·前端·程序员
limuyang23 小时前
在 Android 上用上原生的 xxHash,性能直接拉满
android
Fate_I_C4 小时前
ViewModel 的生命周期与数据保持
android·kotlin
凛_Lin~~4 小时前
安卓实现textview跑马灯效果
android·java
Fate_I_C4 小时前
Kotlin函数一
android·开发语言·kotlin
我讲个笑话你可别哭啊5 小时前
Android Studio无线调试连接安卓设备
android·ide·android studio
pengyu5 小时前
【Kotlin 协程修仙录 · 炼气境 · 初阶】 | 感受天地灵气,写出第一个挂起函数
android·kotlin
林栩link5 小时前
Android CLI 与 Skills:提升 AI Coding 效率
android
AI玫瑰助手5 小时前
Python基础:列表的定义、增删改查核心操作
android·开发语言·python