`
砺雪凝霜
  • 浏览: 155529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EventBus进阶(二)

阅读更多


   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使用进阶》对应源码

    博客《EventBus使用详解(二)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40787203

    EventBus入门

    ### 二、安装 EventBus 在 Android 项目中使用 EventBus,首先需要将其添加到项目的 build.gradle 文件的 dependencies 部分: ```groovy dependencies { implementation 'org.greenrobot:eventbus:3.2.0' // ...

    Android进阶效率开发-eventbus总线事件

    本文将深入探讨EventBus的使用和优势,帮助你提升Android进阶开发的效率。 首先,理解EventBus的基本概念。EventBus是一个轻量级的事件总线框架,它的核心思想是发布/订阅模式。发布者通过发送事件(Event),订阅...

    《EventBus使用详解(一)——初步使用EventBus》对应源码

    博客《EventBus使用详解(一)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/wangyi891223/article/details/49885999

    EventBusDemo

    进阶使用 #### 3.1 精确匹配 通过使用注解的 `sticky` 参数,可以实现粘性事件,即当应用重新启动时,仍然可以接收到之前发布的事件。 #### 3.2 使用线程模型 EventBus 支持多种线程模型,如默认的 `ThreadMode....

    GWT进阶教程

    **二、GWT进阶技术** 1. **自定义Widget**:GWT允许开发者创建自己的Widget,扩展标准库,以满足特定需求。 2. **GWT MVP模式**:Model-View-Presenter模式是一种常见的GWT应用架构,有助于分离视图、模型和逻辑,...

    《Android研发工程师高级进阶》

    学习如何设计合理的模块边界,以及如何通过AIDL、EventBus、Retrofit等工具实现模块间的通信。 4. **Android框架源码解析**:深入研究Android系统框架,如Activity、Intent、BroadcastReceiver、ContentProvider的...

    GWT入门和进阶

    深入理解MVP模式,学习如何设计清晰的模型、视图和呈现者,以及如何使用EventBus协调它们之间的通信。 **8. 模块化和代码分割** 利用GWT的模块化特性,可以将大型应用拆分为多个模块,按需加载,减少首屏加载时间。...

    vue进阶篇.pdf

    - 非父子组件间的数据传递可以使用中央事件总线(EventBus)或者借助共有顶级组件。 组件的生命周期钩子函数允许我们在特定时机执行代码,如`created`、`mounted`等。 组件间存在单向数据流以及双向数据共享: - ...

    自学Android之UI组件:(二)Fragment的进阶使用

    对于更复杂的通信,可以使用接口回调或者EventBus等第三方库。此外,Fragment间通信也需要谨慎处理,避免产生依赖循环。 **Fragment的保存与恢复状态** 当设备旋转或Fragment被销毁时,其状态可能会丢失。通过在...

    Android高手进阶

    二、Android组件与交互 Android应用主要由四大组件构成:活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)和内容提供者(ContentProvider)。深入理解这些组件的功能、生命周期以及它们之间的...

    .毕设&课设&项目&实训-Net开发工具包,零依赖内置分布式动态配置中心,企业服务总线ESB,EventBus.zip

    适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究...

    GWT中文教程(入门进阶)

    9. **GWT EventBus**:EventBus是GWT中的一种事件总线,用于组件间的通信,让组件间解耦。 10. **GWT的现代实践**:随着Web技术的发展,GWT也不断进化,如GWT Elemental支持HTML5新特性,GWT平台(如GXT、SmartGWT...

    自学Android之UI组件:(三)Fragment的使用进阶

    如果需要多个Fragment之间通信,可以考虑使用EventBus、LiveData或ViewModel等设计模式,以减少Activity的耦合度。 9. Fragment的嵌套: Fragment可以包含其他Fragment,创建嵌套的层次结构。这种方式在构建复杂...

    android简单event使用

    进阶使用 - **粘性事件**:如果希望订阅者在注册后立即接收到之前发布的事件,可以使用`@Sticky`注解。但需要注意,应用重启后,这些粘性事件仍会存在,可能需要在应用程序启动时清除。 - **事件优先级**:使用`@...

    安卓java读取网页源码-AndroidStudy:Android进阶内容整理

    Android进阶内容整理 blog地址链接: 书籍: 1.Android群英传 2.Android艺术开发与探索 3.Android设计模式 第三方框架 详细使用步骤加源码解析:1.会使用 2.懂原理 3.框架源码解析 网络框架: 1.Volley框架二次封装 ...

    【Android进阶】(3)Fragment详解(一)(实例一源码)

    Fragment之间的通信可以通过多种方式实现,如使用回调接口、EventBus、LiveData或ViewModel。其中,回调接口是最基础的方法,一个Fragment定义接口,另一个Fragment作为回调实现这个接口。 **Fragment的保存和恢复...

    201888-android培训示例代码及课件

    这份"201888-android培训示例代码及课件"包含了一套完整的Android开发学习资料,由专业讲师精心编排,涵盖了从基础到进阶的多个方面。以下是对各部分内容的详细解读: 1. **Android开发基础** "Android开发基础....

    Android中的Fragment类使用进阶

    另一种方法是使用EventBus或LiveData等观察者模式库,FragmentA发布事件或数据,FragmentB订阅并接收。还有一种是直接使用Bundle对象,通过setArguments()和getArguments()在事务中传递数据,但这种方法通常用于父子...

    从毕业生到程序员:使用C#开发商业软件.rar

    本资源“从毕业生到程序员:使用C#开发商业软件”旨在帮助刚毕业的学生或初学者快速掌握C#语言,进阶为能够独立开发商业级应用的专业程序员。 【描述】:“从毕业生到程序员:使用C#开发商业软件” 这个压缩包包含...

Global site tag (gtag.js) - Google Analytics