android——通信传值:LiveDataBus、Flowbus
问大家一个问题:
Activity之间进行通信你现在使用的是什么?
大家第一印象中Activity之间进行通信是否还是:Intent , Handler,EventBus , RxBus ,广播。
如果你还在用上面说的这些,那你的技术还停留在老旧和原始的技术上,现在技术从LiveData中延伸出 LiveDataBus ,用谷歌的原话
从18年谷歌IO大会开始 官方建议:
在Activity与Activity ,Activity与Fragment,Fragment与Fragment之间通信使用LivedataBus。
1、Activity之间进行通信(LiveDataBus)
下面进入代码:
-
/**
-
* 这条总线用于把任何类中的数据直接传递到activity或是fragment上
-
*/
-
class LiveDataBus private constructor() {
-
//存放订阅者
-
private val bus: MutableMap<String, MutableLiveData<Any>>
-
-
init {
-
bus = HashMap()
-
}
-
-
//注册订阅者,(存入map)
-
-
fun <T> with(key: String, type: Class<T>?): MutableLiveData<T> {
-
if (!bus.containsKey(key)) {
-
bus[key] = MutableLiveData()
-
}
-
return bus[key] as MutableLiveData<T>
-
}
-
-
companion object {
-
val instance = LiveDataBus()
-
}
-
}
使用:
发送
LiveDataBus.instance.with("first", String::class.java).postValue("数据111")
接收
-
LiveDataBus.instance.with("first", String::class.java).observe(this) {
-
Log.e("TAG", "接收到数据为:$it")
-
}
LiveDataBus 与 EventBus、RxBus的 比较
LiveDataBus 与 EventBus 的比较:
LiveDataBus的实现及其简单,相对EventBus复杂的实现,LiveDataBus只需要一个类就可以实
LiveDataBus 与 RxBus 的比较:
LiveDataBus可以减小APK包的大小 并且 依赖支持也更好。因为 LiveDataBus只依赖Android官方组件LiveData,本身实现只一个类。而RxBus需要依赖RxJava和RxAndroid。
最后还有一点 LiveDataBus具有生命周期感知。
在Android系统中使用调用者不需要调用反注册,相比EventBus和RxBus使用更为方便,并且没有内存泄漏风险。
2、通信之FlowBus
请看本人另外一篇文章:
实际项目中的运用
问题:在baseActivity中使用,AActivity和BActivity都继承baseActivity,如果都使用同一个key,则AActivity中post值,在AActivity和BActivity都会触发,因为AActivity和BActivity都是继承baseActivity
怎么解决呢?
baseActivity中使用this.tostring()作为key
在post的activity中使用this.tostring()作为key就可以了
如果不是在activity中post值的话,可以获取当前运行的顶层 Activity再使用
上述问题的出现场景:网络请求,失败了都弹一个弹窗提示,当前最顶层的Activity弹出即可,其他的Activity不要弹
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgccejk
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13