一句话核心区别
SharedUnPeekLiveData = 类型安全、结构化、可维护的全局事件(推荐正式项目用)
UnPeekBus = 极简、字符串 key、快速开发的全局事件总线(适合简单消息)
一、先看写法对比(一眼看懂)
1. SharedUnPeekLiveData 写法
步骤 1:定义单例事件(统一管理)
kotlin
ini
object GlobalEvent {
val loginSuccess = SharedUnPeekLiveData<Boolean>()
val userInfoChanged = SharedUnPeekLiveData<UserInfo>()
}
步骤 2:发送
kotlin
arduino
GlobalEvent.loginSuccess.setValue(true)
步骤 3:接收
kotlin
javascript
GlobalEvent.loginSuccess.observe(this) {
// it: Boolean
}
2. UnPeekBus 写法
无需定义,直接用字符串 key
发送:
kotlin
arduino
UnPeekBus.send("login_success", true)
接收:
kotlin
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
如:
- 刷新列表
- 关闭弹窗
- 页面简单联动
- 临时通知
五、最关键的总结(极简)
表格
| 维度 | SharedUnPeekLiveData | UnPeekBus |
|---|---|---|
| 类型安全 | ✅ 强安全 | ❌ 弱安全 |
| 可维护性 | ✅ 极高 | ❌ 低 |
| 定义方式 | 统一单例管理 | 字符串 key |
| 编译检查 | ✅ 有 | ❌ 无 |
| 项目推荐 | 商业项目、标准架构 | 小项目、快速开发 |
| 官方推荐 | ✅ 首选 | ✅ 次要 |