android——通信(传值)之LiveDataBus、Flowbus

news/2024/7/16 10:26:03 标签: android, android studio, ide

问大家一个问题:

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)
    @Synchronized
    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

请看本人另外一篇文章:

android——消息总线(Eventbus、FlowBus)_android 总线_wy313622821的博客-CSDN博客


http://www.niftyadmin.cn/n/320074.html

相关文章

django视图(request请求response返回值)

一、视图函数介绍 视图就是应用中views.py中定义的函数&#xff0c;称为视图函数 def index(request):return HttpResponse("hello world&#xff01;") 1、视图的第一个参数必须为HttpRequest对象&#xff0c;还可能包含下参数如通过正则表达式组获取的位置参数、通…

【Linux】实现简易 bash --- 进程控制(创建,终止,等待),程序替换

测试效果 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> #define MAX 100 #define ARGV 64int split_command(char* comm…

【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)

本篇文章介绍LNMP架构部署项目&#xff0c;包括Nginx安装配置、PHP安装配置、数据库Mariadb安装配置、Nginx连通PHP、PHP连通MySQL、拆分数据库至独立服务器、拆分静态资源至服务器、扩展一个web服务器。 LNMP架构 Linux Nginx Mysql PHP Nginx不能处理动态请求&#xff0c;如…

编译opencv4.7.0 + opencv_contrib 记录

最近一个项目需要涉及到图像拼接算法&#xff0c;网上了解一番&#xff0c;也大致有思路&#xff1a; 1. 利用surf算法查找特征点 2. 过滤掉一些&#xff0c;获取good点 3. 然后进行配准&#xff08;图像扭曲&#xff09;&#xff0c;对接 4. 形成最终拼接图片 这些工作&a…

软考A计划-真题-分类精讲汇总-第七章(项目管理)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

python列表逆序排列的方法

python中的列表是可以直接进行逆序排列的&#xff0c;但是在 python中&#xff0c;逆序排列也是有一定规则的&#xff0c;一般是按升序排序&#xff0c;也就是从左到右。比如 list[1,2,3,4]&#xff1b; 注意&#xff1a;顺序相同的元素可以放在同一行&#xff1b; 在 python中…

【计网】第三章 数据链路层(3)信道划分介质访问控制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 3.5-1 信道划分介质访问控制&#xff08;播报信道中应用&#xff09;一、传输数据使用的两种链路二、介质访问控制 三、信道划分 介质访问控制&#xff08;静态划分…

Qt扫盲-QPieSlice理论总结

QPieSlice理论总结 一、概述二、标签三、属性设置四、信号说明 一、概述 QPieSlice 类表示饼图中的单个QPieSlice。饼图QPieSlice有一个值和一个标签。将QPieSlice添加到饼图时&#xff0c;QPieSeries对象将自动计算QPieSlice的百分比&#xff0c;并与序列中所有QPieSlice的总…