`

在java项目中使用EventBus的优缺点

阅读更多

       在java项目中,如果不是swing,当要用到事件、通知机制的时,时下最流利的、最简单的方式就是使用

google的guava-EventBus,它简洁、强大、使用方便,最大多数开源爱好者的首选。

       使用EventBus的好处有:

      1.EventBus简洁、强大

      2.不用写回调接口

      3.可以组件、线程间的相互通信

 

       但是,它也有缺点。比如,事件的处理(侦听)是通过方法的参数类型来确定的。当在项目中,当大量使用EventBus时,跟踪和定位问题,是一件很痛苦的事。我们知道,事件的三要素有:事件源、事件状态、事件处理者。即当某个事件源的某个状态发生变化时,事件的处理者侦听到了,会做出相应的处理。而EventBus的注册事件,仅通过EventBus.register()来注册。当一个事件有N个侦听者时,EventBus.register()会分布在项目的N个角落,而且当有N种事件时,这种情况就变得更加恐怖了。当定位问题,无法确定一个事件会有多少个侦听者,因为,你无法知道项目中有多少个register(),并且有多少个方法的参数与post()的参数的类型一致。

       相比之下,javascript和actionscript的事件处理,就友好得多了。如: btn.addEventListener(MouseEvent.CLICK,onClickHandler);这一行代码,就能表达事件的三要素。事件源是btn,事件状态是click,事件的处理者是onClickHandler函数。非常好定位问题。即使通过javascript和actionscript来实现google的EventBus这种全局事件,也可以通过事件状态来快速定位,事件侦听者是谁、有几个事件侦听者。

      个人感觉,google的EventBus更适合用在android项目中,特别是在Activity间的通信。传统项目似乎还是大不好,还是通过回调接口,或观察者模式来实现。因为更直观、更好跟踪和定位问题。

分享到:
评论

相关推荐

    EventBusDemo

    - **Android组件间的通信优化**:对比使用EventBus与其他通信方式(如BroadcastReceiver、接口回调等)的优缺点,理解EventBus在减少组件间耦合上的作用。 - **Gradle构建系统**:了解`build.gradle`文件的结构,...

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在...通过本章的学习,读者将掌握Java反射机制的核心概念,了解如何在实际项目中运用反射,以及其优缺点。通过实践和练习,进一步巩固反射机制的理解和应用。

    guava_programming.zip

    本资料主要围绕Guava中的两个关键特性进行探讨:函数式接口及其在Guava中的应用,以及Guava的EventBus事件总线机制的源码分析和使用经验。 首先,我们来了解一下Guava中的函数式接口。函数式接口是指只有一个抽象...

    MVVM:Kotlin + MVVM + Retrofit +协程+ ViewBinding + EventBus,准备入门kotlin和mvvm的完全可以以本项目为基础,强大,简单,易用!

    MVVM Kotlin + MVVM + Retrofit +协程+ View...关于消息传递,github上有LiveData改造的LiveDataBus,作用和使用方法都称为EventBus,但有缺点,而本项目选择继续使用EventBus的原因,则是因为EventBus的强大以及它

    Android面试复习资料大全(包含java源码)

    16. **Android推送技术解析**:分析不同推送技术的实现和优缺点。 17. **Android Apk安装过程**:了解Android应用安装的具体步骤。 18. **PopupWindow和Dialog区别**:掌握两者的使用场景和区别。 19. **Android...

    不加密Google Guava视频教程.txt

    ├─Google Guava 第25讲-Guava之RateLimiter在漏桶限流算法中的使用.wmv ├─Google Guava 第26讲-Guava之RateLimiter令牌桶算法的使用.wmv ├─Google Guava 第27讲-ListenableFuture,FutureCallBack讲解.wmv ...

    观察者模式

    这种模式在Java编程中广泛使用,特别是在事件驱动或用户界面设计中。 在Java中,观察者模式是通过`java.util.Observer`接口和`java.util.Observable`类来实现的。`Observer`接口定义了观察者的通用行为,它包含了一...

    android笔试面试题

    在Android开发领域,笔试和面试是评估求职者技术能力的重要环节。这份"android笔试面试题"的压缩包可能包含了各种常见的技术问题,旨在帮助求职...在实际学习过程中,应结合实际项目经验,深入理解和应用这些理论知识。

    akka 2.0 文档

    这部分内容介绍了 Akka 支持的序列化方式及其优缺点。 **4.13 FSM (Finite State Machine)** 有限状态机是一种用于建模 Actor 行为的有效方法。这部分内容介绍了如何在 Akka 中实现 FSM 并利用其处理复杂的业务...

    Android程序员向导.rar

    通过Intent、LocalBroadcastManager、EventBus、LiveData等方法实现组件间的通信,理解它们的优缺点和适用场景,有助于构建可维护性更强的应用。 14. **Android最新特性和最佳实践** 时刻关注Android的新特性和...

    MethodRouter:Android组件化方法路由的一种实现方案

    在Android中,这种方法通常用于跨组件通信,尤其是在大型项目中,各个模块之间需要相互协作,但又希望保持各自的独立性。 二、MethodRouter工作原理 MethodRouter的核心在于创建一个全局的路由注册中心,它存储了...

    Android开发中关于获取当前Activity的一些思考

    在Android开发中,获取当前Activity的实例是一...在实际开发中,还应考虑其他方式,如使用EventBus、LiveData或ViewModel等组件来传递数据和执行操作,以减少对特定Activity实例的依赖,提高代码的可维护性和可测试性。

    广播接收器

    对于需要在后台运行的任务,考虑到BroadcastReceiver的限制,可以考虑使用Foreground Service,或者使用现代的组件如Lifecycle-aware components(如LiveData和ViewModel)结合EventBus库来实现类似的功能。...

Global site tag (gtag.js) - Google Analytics