SharedUnPeekLiveData和UnPeekBus的区别:

8 阅读2分钟

一句话核心区别

SharedUnPeekLiveData = 类型安全、结构化、可维护的全局事件(推荐正式项目用)

UnPeekBus = 极简、字符串 key、快速开发的全局事件总线(适合简单消息)

一、先看写法对比(一眼看懂)

1. SharedUnPeekLiveData 写法

步骤 1:定义单例事件(统一管理)

kotlin

object GlobalEvent {
    val loginSuccess = SharedUnPeekLiveData<Boolean>()
    val userInfoChanged = SharedUnPeekLiveData<UserInfo>()
}

步骤 2:发送

kotlin

GlobalEvent.loginSuccess.setValue(true)

步骤 3:接收

kotlin

GlobalEvent.loginSuccess.observe(this) { 
    // it: Boolean
}

2. UnPeekBus 写法

无需定义,直接用字符串 key

发送:

kotlin

UnPeekBus.send("login_success", true)

接收:

kotlin

UnPeekBus.observe<Boolean>(this, "login_success") {
    // it: Boolean
}

二、核心区别(项目架构必看)

1. 类型安全

  • SharedUnPeekLiveData:✅ 类型安全泛型明确,编译时检查,不会传错类型
  • UnPeekBus:❌ 无类型安全靠字符串 key + 泛型指定,传错类型会崩溃

2. 事件可维护性

  • SharedUnPeekLiveData:✅ 可维护、可跳转、可搜索所有事件都在 object GlobalEvent 里想找事件 → 直接点进去
  • UnPeekBus:❌ 散落在各处key 是字符串,容易写错、重复、难维护

3. 使用成本

  • SharedUnPeekLiveData:稍高(需要统一管理)
  • UnPeekBus:极低(一行发送一行接收)

4. 适用项目规模

  • SharedUnPeekLiveData:中大型项目、正式商业项目 ✅
  • UnPeekBus:小项目、快速原型、简单页面通知 ✅

三、官方推荐标准(KunMinX 官方规范)

1. 企业级项目、正规架构 → 必须用 SharedUnPeekLiveData

2. 简单小消息、快速开发 → 可以用 UnPeekBus


四、最实用的选择口诀(背会)

重要事件、结构化、要维护 → SharedUnPeekLiveData

如:

  • 登录成功
  • 用户信息改变
  • 订单状态更新
  • 全局配置变化
  • 多页面联动逻辑

简单通知、临时消息、懒得定义 → UnPeekBus

如:

  • 刷新列表
  • 关闭弹窗
  • 页面简单联动
  • 临时通知

五、最关键的总结(极简)

表格

维度SharedUnPeekLiveDataUnPeekBus
类型安全✅ 强安全❌ 弱安全
可维护性✅ 极高❌ 低
定义方式统一单例管理字符串 key
编译检查✅ 有❌ 无
项目推荐商业项目、标准架构小项目、快速开发
官方推荐✅ 首选✅ 次要

六、最终结论(你项目该用哪个)

你的项目只要是正规 APP → 全部使用 SharedUnPeekLiveData

UnPeekBus 只适合临时、简单、不重要的小消息