什么是EventBus

  由greenrobot组织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架,功能:通过解耦发布者和订阅者简化Android事件传递,EventBus可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。特点:代码简洁,是一种发布订阅设计模式(观察者设计模式)。
 

如何使用

  首先gradle中引入

compile 'org.greenrobot:eventbus:3.0.0'

  EventBus常用的有三个函数

  1.注册事件,注册过的类能够接受EventBus发出的消息事件.

EventBus.getDefault().register(this);

  2.取消注册

EventBus.getDefault().unregister(this);

  3.发出消息,在任意一个活动或服务中调用该方法传递数据,所有注册过事件的类都能收到消息,参数为object类型,在事件处理函数中强制转换

EventBus.getDefault().post("你好");

  4.事件处理函数,在注册过EventBus的类中用该函数处理post传递的数据。函数名可为任意的,只需用注解声明(仅限于EventBus3.0,3.0开始支持注解,之前的版本函数为固定的几个函数),下面解释threadMode参数

@Subscribe(threadMode = ThreadMode.MAIN)
public void XXX(String str){
Log.d("LoginActivity",str);
}

事件处理函数详解

  1.参数含义,threadMode共有4个参数,标识函数在哪个地方运行,比如主线程或者子线程。

    • POSTING(默认):如果使用事件处理函数指定了线程模型为POSTING,那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。在线程模型为POSTING的事件处理函数中尽量避免执行耗时操作,因为它会阻塞事件的传递,甚至有可能会引起ANR。MAIN:
    • MAIN: 事件的处理会在UI线程中执行。事件处理时间不能太长,长了会ANR的。
    • BACKGROUND:如果事件是在UI线程中发布出来的,那么该事件处理函数就会在新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。
    • ASYNC:无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行,同样,此事件处理函数中禁止进行UI更新操作。耗时操作应该使用本模式

  2.事件优先级。在相同的线程模式下,高优先级的订阅者将会比低优先级的订阅者更早接收到事件。EventBus默认的优先级是0,这样高优先级事件处理完时间后可以使用cancelEventDelivery(object),阻断消息的传播。
         注意:优先级不会影响不同线程模式下的订阅者接收事件的顺序。

@Subscribe(threadMode = ThreadMode.MAIN,priority = 1)
public void XXX(object o){
  //处理逻辑
  //阻断传递
  cancelEventDelivery(o);
}

粘性事件

  简单的说粘性事件就是在发布粘性消息后,再在某个类中注册EventBus,声明一个粘性事件处理函数任然可以接收到之前发布的粘性事件。

  1.发布事件,注意这里是postSticky

EventBus.getDefault().postSticky("Hello everyone!");

  2.注册Eventbus,和之前一样

EventBus.getDefault().register(this);

  3.处理消息,注意在注解参数中声明:sticky:true,表示该事件能够接受粘性事件

  

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(String event) {
Log.d("EventBus",event);
}

EventBus轻松使用的更多相关文章

  1. Android消息传递之EventBus 3.0使用详解

    前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...

  2. 【Bugly干货分享】老司机教你 “飙” EventBus 3

    Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. EventBus对于Android ...

  3. BroadcastReceiver和EventBus区别是什么

    BroadcastReceiver和EventBus区别是什么?他俩都挺像的,什么时候用BroadcastReceiver,什么时候用EventBus呢? Android广播分为两个方面:广播发送者和 ...

  4. 安卓开发笔记——探索EventBus

    1.关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大.例如多个Fragment之间的数据传递,Service与Ac ...

  5. Dhroid框架笔记(IOC、EventBus)

    dhroid 目前包含了6大组件供大家使用1.Ioc容器: (用过spring的都知道)视图注入,对象注入,接口注入,解决类依赖关系2.Eventbus: android平台事件总线框架,独创延时事件 ...

  6. 安卓开发笔记——探索EventBus(转)

    1.关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大.例如多个Fragment之间的数据传递,Service与Ac ...

  7. 安卓高级EventBus使用详解

    我本来想写但是在网上看了下感觉写得不如此作者写得好:http://www.jianshu.com/p/da9e193e8b03 前言:EventBus出来已经有一段时间了,github上面也有很多开源 ...

  8. EventBus使用详解

    EventBus是针一款对Android的发布/订阅事件总线.它可以让我们很轻松的实现在Android各个组件之间传递消息,并且代码的可读性更好,耦合度更低.长话短说直接介绍使用. 如何使用 (以下介 ...

  9. (转载)EventBus使用详解

    (转载)http://liuling123.com/2016/01/EventBus-explain.html 概述 EventBus是针一款对Android的发布/订阅事件总线.它可以让我们很轻松的 ...

随机推荐

  1. 监测代码执行时间之Stopwatch

    var sw = new System.Diagnostics.Stopwatch(); sw.Start(); 中间为要执行的代码 sw.Stop(); var msg = "上面操作耗时 ...

  2. Angular2入门教程-2 实现TodoList App

    最近在学习<Angular从零到一>(机械工业出版社) 遇到一些问题,书中讲的不明白,在网上找了一些,资源很多,也有很多前人的经验 https://blog.csdn.net/ztguan ...

  3. ADO----nDSN

    //////////////链接数据库 非DSN模式/////////////////////////////    //CString strOpen="DSN=DBAddressBook ...

  4. Enable Scribble,Enable Guard Edges,Enable Guard Malloc,Zombie Objects

    最近项目中使用一个翻拍身份证信息识别活体检测的第三方框架,在使用时会偶然性的出现崩溃的现象,经过查找是因为第三方框架中有释放的内存区域再次引用引起的,因而补充一下相关知识点.   在Xcode Edi ...

  5. MS SQL Server数据库在线管理工具

    MS SQL Server数据库以其优异的性能,被广泛使用,特别是政务,医疗行业.但是远程维护挺不方便的,目前有一款基于WEB的工具TreeSoft数据库管理系统. 免安装,直接解压就可以用了.直接通 ...

  6. Mybatis之reflection包源代码解析(一)

      一.序言 Mybatis作为ORM,实现了对象与关系数据库间的映射.Mybatis中的映射包含两个方面: 1.将对象中的值(parameterType所指定的对象)映射到具体的sql中,例如: & ...

  7. Windows上只复制目录结构不复制文件

    xcopy /T /E D:\filetest\FB\BK\bs\ D:\filetest\asdf

  8. HTML5新增的form属性简介——张鑫旭

    一.引言 HTML5中新增了一个名为form的属性,是一个与处理表单相关的元素. 在HTML4或XHTML中,我们要提交一个表单,必须把相关的控件元素都放在<form>元素下.因为表单提交 ...

  9. 关于JqueryCheck选中获取数据

    关于Jquery获取Check选中数据 首先还是得引用Jquery的包,然后新增3个CheckBox <div> <input type="checkbox" n ...

  10. 在RecyclerView列表滚动的时候显示或者隐藏Toolbar

    先看一下效果: 本文将讲解如何实现类似于Google+应用中,当列表滚动的时候,ToolBar(以及悬浮操作按钮)的显示与隐藏(向下滚动隐藏,向上滚动显示),这种效果在Material Design ...