使用官方的LiveData 实现消息总线 LiveDataBus

LiveDataBus:一种Android事件总线实现

最新推荐文章于 2025-06-09 11:38:55 发布

原创

最新推荐文章于 2025-06-09 11:38:55 发布

·

置顶

·

372 阅读

·

0

·

0

·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

文章标签:

#android

#kotlin

class LiveDataBus private constructor() {

private val bus: MutableMap>

private object SingletonHolder {

val DATA_BUS = LiveDataBus()

}

fun with(target: String): BusMutableLiveData {

if (!bus.containsKey(target)) {

bus[target] = BusMutableLiveData()

}

return bus[target] as BusMutableLiveData

}

companion object {

fun get(): LiveDataBus {

return SingletonHolder.DATA_BUS

}

}

/**

* 事件订阅,关注生命周期

* @param sticky =true 表示当前订阅可以接受订阅前最后发送的结果

*/

fun observe(target: String, owner: LifecycleOwner, sticky:Boolean=false,observe: (T) -> Unit) {

with(target).observe(owner, object : BusObserver() {

override fun onChanged(t: T) {

if (sticky||mVersion != START_VERSION) {

observe.invoke(t)