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的发布/订阅事件总线.它可以让我们很轻松的 ...
随机推荐
- (一)面向对象的javascript
javascript是一门典型的动态类语言 一:鸭式辨型(指导我们关注对象的行为,而不关注对象本身). var duck = { duckString: function(){ console.log ...
- 深入理解java虚拟机---4虚拟机类加载机制
本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...
- java 数据脱敏
所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...
- 彻底弄懂HTTP缓存机制及原理(转载)
https://www.cnblogs.com/chenqf/p/6386163.html 前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系 ...
- Java开发中常用的设计模式(三)---建造者模式
一. 模式结构 建造者模式主要包含四个角色: Product:产品角色. Builder:抽象建造者.它声明为创建一个Product对象的各个部件指定的抽象接口. ConcreteBuilder:具体 ...
- Differences between page and segment
https://techdifferences.com/difference-between-paging-and-segmentation-in-os.html how does paging so ...
- Extjs校验配置项
Extjsform组件1.Ext.form.Action 配置项:success:执行成功后回调的函数,包括两个参数:form和actionfailure:执行失败后回调的函数,包括两个参数:form ...
- Tips——canvas闪屏问题的处理
一.问题描述 在画canvas时,遇到屏幕瞬间空白的情况(大约1~2帧),造成用户体验不好. 二.原因 canvas的绘图过程是:先擦出整个画布:然后浏览器到达重绘时间点后,在空白的canvas上作画 ...
- nodejs做的一个测试端口程序
最近在学习nodejs的http,然后做了一个测试域名有没有使用那些端口,原意是用来做一个本地的静态服务器,然后运行前先测试端口,首先要用到的是net模块,主要用到的是Socket,判断其连接状态即可 ...
- 百万级数据 MySQL处理(转)
转自 http://www.cnblogs.com/win7xt/p/3156334.html 使用MySQL处理百万级以上数据时,不得不知道的几个常识 最近一段时间参与的项目要操作百万级数据量的 ...