文档章节

EventBus 3.0的用法详解(二)

hejunbinlan
 hejunbinlan
发布于 2016/03/01 15:03
字数 717
阅读 54
收藏 3
点赞 1
评论 0

这是一个系列,如果你还没有看之前的文章:

EventBus 3.0的用法详解(一)

前一篇文章简单介绍了EventBus 3.0的用法,现在是时候详解其用法了。首先声明,EventBus 3.0的改动针对2.4的改动并不是特别大,但是对于其性能的提升是另外一个说法了,所以建议学习EventBus 3.0。

注解

新增的@Subscribe

threadMode = ThreadMode.MainThread

用注解的方式代替约定的方法名规范,是其最大的改变。在2.4中,你可能需要这么定义:

public void onEventMainThread(MessageEvent event) {
        log(event.message);
    }

该方法为接收消息后在主线程中处理事件,而在3.0中:

@Subscribe(threadMode = ThreadMode.MainThread) //在ui线程执行 public void onUserEvent(UserEvent event) {
        log(event.message);
    }

其中ThreadMode提供了四个常量:

  • MainThread 主线程

  • BackgroundThread 后台线程

  • Async 后台线程

  • PostThread 发送线程(默认)

BackgroundThread:当事件是在UI线程发出,那么事件处理实际上是需要新建单独线程,如果是在后台线程发出,那么事件处理就在该线程。该事件处理方法应该是快速的,避免阻塞后台线程。

Async:发送事件方不需要等待事件处理完毕。这种方式适用于该事件处理方法需要较长时间,例如网络请求。

sticky = true

默认情况下,其为false。什么情况下使用sticky呢?

相信大多数使用过EventBus 2.4的同学或多或少的使用过:

EventBus.getDefault().postSticky(new VoteEvent(obj));
EventBus.getDefault().registerSticky(this);

你会发现非常的麻烦,那么在3.0中:

EventBus.getDefault().postSticky(new VoteEvent(obj));
EventBus.getDefault().register(this); @Subscribe(sticky = true)

什么时候使用sticy,当你希望你的事件不被马上处理的时候,举个栗子,比如说,在一个详情页点赞之后,产生一个VoteEvent,VoteEvent并不立即被消费,而是等用户退出详情页回到商品列表之后,接收到该事件,然后刷新Adapter等。其实这就是之前我们用startActivityForResult和onActivityResult做的事情。

priority = 1

相信大部分人知道该用法,值越小优先级越低,默认为0。

建议

推荐大家在使用EventBus的时候,创建一个事件类,把你的每一个参数(或者可能发生冲突的参数),封装成一个类:

public class Event { public static class UserListEvent { public List<User> users ;  
    } public static class ItemListEvent { public List<Item> items;  
    }    
}

添加processor

按照Markus Junginger的说法(EventBus创作者),在3.0中,如果你想进一步提升你的app的性能,你需要添加:

provided 'de.greenrobot:eventbus-annotation-processor:3.0.0-beta1'

其在编译的时候为注册类构建了一个索引,而不是在运行时,这样的结果是其让EventBus 3.0的性能提升了一倍,相比2.4来说,其会是它的3到6倍。大家可以感受下:

本文转载自:https://segmentfault.com/a/1190000004314315

共有 人打赏支持
hejunbinlan
粉丝 40
博文 532
码字总数 21018
作品 0
浦东
高级程序员
gis-luq/RuntimeViewer

RuntimeViewer —— 基于ArcGIS Runtime 100.x开发的移动应用程序框架 组件式开发框架,兼容手机、平板多种设备。 平板模式 手机模式 使用说明 项目采用插件化结构设计,文件夹架构说明如下 ...

gis-luq ⋅ 05/11 ⋅ 0

Android开源框架源码鉴赏:EventBus

作者:郭孝星 校对:郭孝星 关于项目 Android Open Framework analysis项目主要用来分析Android平台主流开源框架的源码与原理实现。 文章目录 一 注册订阅者 二 发布事件Event 三 接收事件E...

郭孝星 ⋅ 03/27 ⋅ 0

Android之撸一个类似EventBus的轮子

用过eventBus的人都知道,在组件及时通讯中,使用非常方便。 一般我们是这样做的:总结为三部曲: 这就是EventBus的强大之处,用过的人都说好,哈哈哈哈!!!! 上图描述吧。有图有真相 Cr...

还有de小星 ⋅ 05/25 ⋅ 0

RxJava实现的EventBus-RxBus

使用RxJava2实现RxBus 当我们使用RxJava2实现EventBus模式时,我们称其为RxBus. 注意:这仅作为一个例子。 那么,就让我们来看看如何使用RxJava2实现RxBus吧 首先,你得了解RxJava中有关sub...

塞上牧羊空许约 ⋅ 05/12 ⋅ 0

【死磕Sharding-jdbc】—–路由&执行

原文作者:阿飞Javaer 原文链接:https://www.jianshu.com/p/09efada2d086 继续以模块中的为基础,剖析分库分表简单查询SQL实现--,即如何执行简单的查询SQL,接下来的分析以执行SQL语句为例...

飞哥-Javaer ⋅ 05/03 ⋅ 0

gis-luq/RuntimeViewer3D

RuntimeViewer —— 基于ArcGIS Runtime 100.x开发的移动应用程序框架 组件式开发框架,兼容手机、平板多种设备。 平板模式 手机模式 如何快速运行应用程序? 使用git工具下来工程并将工程导...

gis-luq ⋅ 前天 ⋅ 0

你知道event库吗?教你如何写一个自己的event库

在使用BmobSDK开发App的时候,会有很多异步回调,类似如登录成功,插入数据成功的事件,虽然V3.5.0开始内部用rxjava去重构,也提供了rx风格的api,不过写事件回调的方法还是比较烦,这时候你...

小小琪bmob后端云 ⋅ 03/16 ⋅ 0

Android 计步器应用 - healthgo

healthgo a android pedometer app (安卓计步器) Support Android 4.1- 7.0 Thanks Project/People desc other Realm a mobile database 使用了这个数据库 EventBus a publish/subscribe eve......

五十风 ⋅ 04/13 ⋅ 0

基于 MVP 架构使用Android通用开发框架快速开发微博项目实战

课程目标: 基于 MVP 架构使用Android通用开发框架快速开发微博项目实战 适应人群: 适合大学生和初中级android开发工程师,可以系统化的微博类APP的开发,系统化掌握商业化项目的开发。* 不...

13122542396 ⋅ 05/25 ⋅ 0

阿里ARouter路由实现Android模块化开发

概述 从 2016 年开始,模块化在 Android 社区越来越多的被提及。随着移动平台的不断发展,移动平台上的软件慢慢走向复杂化,体积也变得臃肿庞大,为了降低大型软件复杂性和耦合度,同时也为了...

code_xzh ⋅ 04/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 15分钟前 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部