EventBus轻松使用
什么是EventBus
如何使用
首先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轻松使用的更多相关文章
- Android消息传递之EventBus 3.0使用详解
前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...
- 【Bugly干货分享】老司机教你 “飙” EventBus 3
Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. EventBus对于Android ...
- BroadcastReceiver和EventBus区别是什么
BroadcastReceiver和EventBus区别是什么?他俩都挺像的,什么时候用BroadcastReceiver,什么时候用EventBus呢? Android广播分为两个方面:广播发送者和 ...
- 安卓开发笔记——探索EventBus
1.关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大.例如多个Fragment之间的数据传递,Service与Ac ...
- Dhroid框架笔记(IOC、EventBus)
dhroid 目前包含了6大组件供大家使用1.Ioc容器: (用过spring的都知道)视图注入,对象注入,接口注入,解决类依赖关系2.Eventbus: android平台事件总线框架,独创延时事件 ...
- 安卓开发笔记——探索EventBus(转)
1.关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大.例如多个Fragment之间的数据传递,Service与Ac ...
- 安卓高级EventBus使用详解
我本来想写但是在网上看了下感觉写得不如此作者写得好:http://www.jianshu.com/p/da9e193e8b03 前言:EventBus出来已经有一段时间了,github上面也有很多开源 ...
- EventBus使用详解
EventBus是针一款对Android的发布/订阅事件总线.它可以让我们很轻松的实现在Android各个组件之间传递消息,并且代码的可读性更好,耦合度更低.长话短说直接介绍使用. 如何使用 (以下介 ...
- (转载)EventBus使用详解
(转载)http://liuling123.com/2016/01/EventBus-explain.html 概述 EventBus是针一款对Android的发布/订阅事件总线.它可以让我们很轻松的 ...
随机推荐
- linq之多表连接
1.左连接: var LeftJoin = from emp in ListOfEmployees join dept in ListOfDepartment on emp.DeptID equals ...
- win7怎么去除快捷方式的小箭头
方式一. 新建一个txt文档把以下内容复制进去 在重命名001.bat 打开就行了 但要重启之后才有效 @ECHO OFF :MENU ECHO. ECHO. =-=-=-=-=请选择您要运行的项目= ...
- 使用 ahk 让普通键盘变为Dvorak键盘
本文告诉大家,如何使用软件做出Dvorak键盘. 在开始说如何做之前,需要告诉大家,什么是Dvorak键盘. Dvorak Simplified Keyboard /ˈdvɔːræk, dəˈvɔː- ...
- 实现一个符合 RESTful 架构的程序
前言:在网上经常看到 RESTful,十分好奇,于是自己来试试. 代码地址:https://github.com/yuleGH/restdemo 首先,介绍一下 RESTful 架构:理解 RESTf ...
- vue.js 项目打包
vuejs是个前端框架,npm run dev的目的在于前端开发的时候可以实时调试.所以npm run dev 只是开发时期会用到,在生产环境中我们应该使用nginx,apahce tomcat等应用 ...
- JS实现填报时对修改过的单元格进行标识
1. 描述 在填报预览时,对单元格编辑后,其左上角有个红色标记,但非常不明显,用户很难注意到.有没有什么好的办法,对单元格操作后,将其做较明显的特殊标记处理,方便用户识别呢? 如图所示:对单元格进行操 ...
- 如何选择分布式事务形态(TCC,SAGA,2PC,基于消息最终一致性等等)
各种形态的分布式事务 分布式事务有多种主流形态,包括: 基于消息实现的分布式事务 基于补偿实现的分布式事务 基于TCC实现的分布式事务 基于SAGA实现的分布式事务 基于2PC实现的分布式事务 这些形 ...
- 带你从零学ReactNative开发跨平台App开发(九)
ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...
- ES6-fetch
fetch 事实标准,并不存在与ES6规范中,基于Promise实现. 目前项目中对Promise的兼容性尚存在问题,如果在项目中应用fetch,需要引入es6-promise和fetch. fis3 ...
- ubuntu16.04安装网易云音乐
源网址 对于网易,我只服云音乐,业界良心,用过的人都知道.我最喜欢的就是歌曲的评论功能,还有朋友圈子.里面有很多好段子,还有很多的好故事,基本上,不是分手,就是回忆初恋,还有吐槽的.我认为音乐带给人的 ...