EventBus进阶(二)
上一篇简单介绍了EventBus的简单用法,下面来介绍下EventBus的其它的一些用法
1 事件订阅的优先级的使用
EventBus.getDefault().register(this, priority);
在同一个线程级别中,订阅者的优先级越高,就越先收到消息,默认优先级是0
2 使用EventBusBuilder配置EnventBus
EventBus2.3新增使用EventBusBuilder 去配置各种不同的EventBus,例如去创建一个没有订阅者的EventBus
EventBus eventBus = EventBus.builder().logNoSubscriberMessages(false).sendNoSubscriberEvent(false).build();
当订阅者发生异常的时候,我们可以创建一个捕捉订阅者异常的EventBus(EventBus默认是会捕捉订阅者发生的异常的)
EventBus.builder().throwSubscriberException(BuildConfig.DEBUG).installDefaultEventBus();
3 取消事件传递
// Called in the same thread (default) public void onEvent(MessageEvent event){ // Process the event ... EventBus.getDefault().cancelEventDelivery(event) ; }
4 使用StickeyEvent实现android组件之间进行通讯
当事件post之后,我们可能要获得这些事件携带的一些数据,这个有时可以作为事件初始化完成的信号。或者你可以获取一些最新的信息,例如传感器和位置信息,这些数据每时每刻都在更新,可能我们最关心的却是最新的。你不必使用缓存,仅仅用sticky events就完全可以实现。EventBus会在内存中存储最后一个特定类型的sticky event。stikey event 可以准确的传递给所有的事件订阅者 ,因此,你不用需要处理任何特殊的逻辑去考虑哪些已经可用的数据。
看了eventBus的官方文档之后,其实我还是云里雾里的,这stikeyEvent能干嘛呢?按照个人的理解它是一个可以被缓存的事件,而用一般的事件,你会发现当Activity跳转的时候,事件所携带的信息是不能带过去的,也就是说一般的Event是不会被缓存的。前面介绍eventBus的时候,它是可以替代android 组件之间通讯的,那是不是可以使用stikeyEvent可以实现呢?答案是肯定的。
下面介绍如何使用StikeyEvent实现ActivityA和Activity B之间进行通讯
- ActivityA跳转到ActivityB的时候,post事件
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
- 当Activity B启动的时候,注册stickyEvent
@Override public void onStart() { super.onStart(); EventBus.getDefault().registerSticky(this); }
- 在Activity B中新建一个接收StickyEvent事件的方法
public void onEventMainThread(MessageEvent event) { textField.setText(event.message); }
- 反注册StickyEvent
@Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); }
补充:1 你可以调用removeStickyEvent 方法移除之前post的StikeyEvent
2 可以得到最后一个特定类型的StickyEvent
EventBus.getDefault().getStickyEvent(Class<?> eventType)
5 ProGuard 配置
-keepclassmembers class ** { public void onEvent*(**); } # Only required if you use AsyncExecutor -keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent { <init>(java.lang.Throwable); }
混淆代码的时候千万别忘记了加上
相关推荐
博客《EventBus使用详解(二)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40787203
### 二、安装 EventBus 在 Android 项目中使用 EventBus,首先需要将其添加到项目的 build.gradle 文件的 dependencies 部分: ```groovy dependencies { implementation 'org.greenrobot:eventbus:3.2.0' // ...
本文将深入探讨EventBus的使用和优势,帮助你提升Android进阶开发的效率。 首先,理解EventBus的基本概念。EventBus是一个轻量级的事件总线框架,它的核心思想是发布/订阅模式。发布者通过发送事件(Event),订阅...
博客《EventBus使用详解(一)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/wangyi891223/article/details/49885999
进阶使用 #### 3.1 精确匹配 通过使用注解的 `sticky` 参数,可以实现粘性事件,即当应用重新启动时,仍然可以接收到之前发布的事件。 #### 3.2 使用线程模型 EventBus 支持多种线程模型,如默认的 `ThreadMode....
**二、GWT进阶技术** 1. **自定义Widget**:GWT允许开发者创建自己的Widget,扩展标准库,以满足特定需求。 2. **GWT MVP模式**:Model-View-Presenter模式是一种常见的GWT应用架构,有助于分离视图、模型和逻辑,...
学习如何设计合理的模块边界,以及如何通过AIDL、EventBus、Retrofit等工具实现模块间的通信。 4. **Android框架源码解析**:深入研究Android系统框架,如Activity、Intent、BroadcastReceiver、ContentProvider的...
深入理解MVP模式,学习如何设计清晰的模型、视图和呈现者,以及如何使用EventBus协调它们之间的通信。 **8. 模块化和代码分割** 利用GWT的模块化特性,可以将大型应用拆分为多个模块,按需加载,减少首屏加载时间。...
- 非父子组件间的数据传递可以使用中央事件总线(EventBus)或者借助共有顶级组件。 组件的生命周期钩子函数允许我们在特定时机执行代码,如`created`、`mounted`等。 组件间存在单向数据流以及双向数据共享: - ...
对于更复杂的通信,可以使用接口回调或者EventBus等第三方库。此外,Fragment间通信也需要谨慎处理,避免产生依赖循环。 **Fragment的保存与恢复状态** 当设备旋转或Fragment被销毁时,其状态可能会丢失。通过在...
二、Android组件与交互 Android应用主要由四大组件构成:活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供者(ContentProvider)。深入理解这些组件的功能、生命周期以及它们之间的...
适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究...
9. **GWT EventBus**:EventBus是GWT中的一种事件总线,用于组件间的通信,让组件间解耦。 10. **GWT的现代实践**:随着Web技术的发展,GWT也不断进化,如GWT Elemental支持HTML5新特性,GWT平台(如GXT、SmartGWT...
如果需要多个Fragment之间通信,可以考虑使用EventBus、LiveData或ViewModel等设计模式,以减少Activity的耦合度。 9. Fragment的嵌套: Fragment可以包含其他Fragment,创建嵌套的层次结构。这种方式在构建复杂...
进阶使用 - **粘性事件**:如果希望订阅者在注册后立即接收到之前发布的事件,可以使用`@Sticky`注解。但需要注意,应用重启后,这些粘性事件仍会存在,可能需要在应用程序启动时清除。 - **事件优先级**:使用`@...
Android进阶内容整理 blog地址链接: 书籍: 1.Android群英传 2.Android艺术开发与探索 3.Android设计模式 第三方框架 详细使用步骤加源码解析:1.会使用 2.懂原理 3.框架源码解析 网络框架: 1.Volley框架二次封装 ...
Fragment之间的通信可以通过多种方式实现,如使用回调接口、EventBus、LiveData或ViewModel。其中,回调接口是最基础的方法,一个Fragment定义接口,另一个Fragment作为回调实现这个接口。 **Fragment的保存和恢复...
这份"201888-android培训示例代码及课件"包含了一套完整的Android开发学习资料,由专业讲师精心编排,涵盖了从基础到进阶的多个方面。以下是对各部分内容的详细解读: 1. **Android开发基础** "Android开发基础....
另一种方法是使用EventBus或LiveData等观察者模式库,FragmentA发布事件或数据,FragmentB订阅并接收。还有一种是直接使用Bundle对象,通过setArguments()和getArguments()在事务中传递数据,但这种方法通常用于父子...
本资源“从毕业生到程序员:使用C#开发商业软件”旨在帮助刚毕业的学生或初学者快速掌握C#语言,进阶为能够独立开发商业级应用的专业程序员。 【描述】:“从毕业生到程序员:使用C#开发商业软件” 这个压缩包包含...