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

相关推荐
杉氧7 小时前
100% Kotlin:基于 KMP + Compose Multiplatform 的全栈架构实战(Clean Architecture + MVI)
android·架构
小仙女喂得猪7 小时前
AI 写 Android 代码老翻车?我把移动端的 Harness 系统开源了
android·github·ai编程
杉氧7 小时前
第一篇:从一个 Dagger 报错开始:手把手带你搭建 Hilt 依赖注入的护城河
android·架构
咋吃都不胖lyh7 小时前
短期记忆和长期记忆都存 MySQL
android·java·开发语言
杊页9 小时前
系列三:组件化与模块化进阶 | 第8篇 组件化与模块化核心实战区别:大型项目架构的必由之路
android·android jetpack
曲幽10 小时前
旧手机别扔!用 Termux 搭个私人云盘,比网盘香多了
android·termux·alist·filebrowser
Kapaseker11 小时前
Android 开发来看看 Kotlin 2.4.0 更新了个啥
android·kotlin
前端与小赵11 小时前
快速生成安卓证书并打包生成安卓apk(保姆教程)
android·前端
吃螺丝粉12 小时前
MySQL 5.7 到 9.7.0 LTS 升级核心指南
android