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

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