广播、观察者模式、EventBus、RxBus的区别

2024-04-03 09:58

本文主要是介绍广播、观察者模式、EventBus、RxBus的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0、说明

本篇是对Android广播、观察者模式、EventBus、RxBus四者的一些看法,工作中遇到问题时候的一些取舍,也可以回答面试官提到的这方面问题。

1、Android全局广播Broadcast

首先全局广播是重量级别的,并且会消耗很多资源,但是可以跨进程通信,通过以上优缺点可以知道只有一种情况下才会用到它,跨进程的时候,这个特点也是其他方案不能达到的。

2、Android本地广播Broadcast

Local Broadcast也是会消耗很多资源的,但是相比全局广播要轻量一些,他的最大优点是可以拿到Context、Intent等和Android系统紧密相关的上下文,这样就方便数据的传递和接受。

3、观察者模式

观察者观察一个主题的时候,就会把自己添加到主题的List里面,然后主题更新的时候会遍历主题List中的观察者,调用观察者模式中的update函数来更新自己,最后离开的时候要从主题中移除观察者,防止引用造成的内存泄漏。网络上面观察者模式的例子,由此可以看出观察者模式中观察者是要实现主题更新时候的接口,其实这就是和EventBus的不同,耦合性比EventBus大。

4、EventBus

EventBus中执行

EventBus.getDefault().register(this);

的时候是让EventBus扫描当前类,把onEvent方法记录在Map里面,参数为key,方法为value,然后EventBus.getDefault().post(...)的时候,通过post里面的type来查找Map中对应的value,然后通过反射来执行我们的方法,最后别忘了在最后

EventBus.getDefault().unregister(this);

注销EventBus防止内存泄漏。
好多人说是观察者模式,但是仔细查看可以知道和观察者模式最大的不同是,主题在要更新数据的时候是通过反射来执行动作的
个人感觉EventBus的缺点是:代码阅读性降低、不能跨进程、不能混淆,但是优点很多,比观察者模式耦合性更低,比广播更轻量。

5、RxBus

原理和EventBus一样,但是如果项目中用了RxJava,就可以选择这个强于EventBus。

这篇关于广播、观察者模式、EventBus、RxBus的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/872601

相关文章

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

解读@ConfigurationProperties和@value的区别

《解读@ConfigurationProperties和@value的区别》:本文主要介绍@ConfigurationProperties和@value的区别及说明,具有很好的参考价值,希望对大家... 目录1. 功能对比2. 使用场景对比@ConfigurationProperties@Value3. 核

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

关于Mybatis和JDBC的使用及区别

《关于Mybatis和JDBC的使用及区别》:本文主要介绍关于Mybatis和JDBC的使用及区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、JDBC1.1、流程1.2、优缺点2、MyBATis2.1、执行流程2.2、使用2.3、实现方式1、XML配置文件