博客: 安卓之家
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917

EventBus3 简介


EventBus Android 发布/订阅事件总线,可简化 Activities, Fragments, Threads, Services 等组件间的消息传递,可替代 Intent, Handler, BroadCast ,接口等传统方案,更快,代码更小,50K 左右的 jar 包,代码更优雅,彻底解耦。EventBus3 是最新版本,官网地址:

https://github.com/greenrobot/EventBus

使用


这里简单介绍下使用方法:

1 添加依赖 compile 'org.greenrobot:eventbus:3.0.0'

2 编写事件类

3 post 发布事件

这里有直接发布和滞留发布

//直接发布
EventBus.getDefault().post("直接发布");
//滞留发布
EventBus.getDefault().postSticky("滞留发布");

注意可以发布的是一个 Object 类,发送什么,订阅者就会接收什么。

此处要注意两个地方:

  1. 如果 post 字节数据,此时订阅者的方法里参数需为 Byte,而不是 byte,同样的,post int数据,订阅方法参数需为 Interger,其他基本数据类型同理

  2. 如果 post 字符串,那么所有方法的参数是 String 类型的订阅者都会接收到事件而执行方法。

4 订阅者接收事件

订阅的时候要注册和取消注册。

注册一般是在 onCreateonStart 里注册,尽量不要在 onResume,可能出现多次注册的情况,比如下面这个异常::

EventBusException: Subscriber class already registered to event class

可以先判断下:

    if (!EventBus.getDefault().isRegistered(this)) {EventBus.getDefault().register(this);}

参看这里:GreenRobot EventBusException: Subscriber class already registered to event class

取消注册 要写到 onDestroy 方法里,不要写到 onStop 里,有时会出现异常的哦

EventBus 3 和之前版本的 EventBus 不兼容,这里采用注解的方法来接收事件,四种注解 @Subscrible@Subscrible(threadMode = ThreadMode.ASYNC)@Subscribe(threadMode = ThreadMode.BACKGROUND)@Subscribe(threadMode = ThreadMode.MAIN) 分别对应之前的 onEvent()onEventAsync()onEventBackground()onEventMainThread()

EventBus 3 采用注解后,方法名没有限制了,参数只有一个,和发送者 post 的参数对应配对,在未声明 threadMode 时,默认的线程模式为 ThreadMode.POSTING,只有在该模式下才可以取消线程,否则容易导致如下异常:

org.greenrobot.eventbus.EventBusException: This method may only be called from inside event handling methods on the posting thread

由于可在任何地方都可以 post 一个事件,那么在不同线程之间传递事件,比如在工作线程传递一个事件更新UI线程中的一个控件,则需要注意 threadMode 的切换。

好了,基本使用大概就这些,后面遇到会补充…

2016.07.13补充:

今天遇到了订阅事件无法执行的情况,分析后发现是订阅事件的 Activity 还未执行的原因。

找到原因就好办了,这时候就需要用到 postSticky

发布事件时用 postSticky 操作:

EventBus.getDefault().postSticky(event);

订阅时,添加 sticky = true

@Subscribe(sticky = true)    //看下 `@Subscribe` 源码知道 `sticky` 默认是 `false`
public void onEvent(Event e) { ---
}  

这里也有个坑,就是 EventBus.getDefault().register(this); 注册时最好放到各变量初始化最后,否则可能会出现一些变量空指针异常。

混淆


没什么说的,复制下面代码到你的混淆文件即可:

-keepattributes *Annotation*
-keepclassmembers class ** {    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *;
}
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {    <init>(java.lang.Throwable);
}

2016-09-06 更新as可用插件:

发布的事件多了以后,我们很难去管理,下面推荐个 AS 插件:

https://github.com/likfe/eventbus3-intellij-plugin

更多 AS 插件请访问:https://github.com/jp1017/AndroidStudioPlugins

欲知更多 EventBus 的内容,还可参考:

EventBus3新特性及用法
EventBus 源码解析
Android EventBus源码解析 带你深入理解EventBus

最后,非常感谢您的阅读,有任何疑问,可以后面评论,谢谢!

神奇的安卓开发网站:http://androidcat.com/

安卓开源库收集整理:https://github.com/XXApple/AndroidLibs

分享是一种美德,更是一种生活方式!!

也许你会说我是一个梦想者,但我不是唯一的一个。

悦分享,越快乐^_^

欢迎交流,转载请注明出处,谢谢!

EventBus3 简单使用及注意点相关推荐

  1. linux判断tomcat状态,LINUX下如何查看tomcat运行状态,判断其是否启动

    1,查看Tomcat启动日志. ${catalina_home}\logs [root@iZ25b4ffkfaZ logs]# tail -f catalina.out Sep 10, 2015 11 ...

  2. EventBus3.0简单使用快速入门

    加入引用 implementation 'org.greenrobot:eventbus:3.0.0' 自定义一个事件类 public class EventBusMessage {public St ...

  3. EventBus3.0源码解析

     本文主要介绍EventBus3.0的源码 EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递. EventBus使用简单,并将事件发布和 ...

  4. EventBus3.0开发详解 近万开发者收藏

    什么是EventBus? eventBus是GreenRobot公司出品的一个基于[publish/subscribe]模型的开发库 1.GreenRobot公司除了出品eventBus还出品了比较有 ...

  5. Android开源框架——事件总线 EventBus3.0讲解

    开源项目地址 官网:https://github.com/greenrobot/EventBus 介绍 EventBus主要使用了观察者模式设计方案.主要替代Intent.Handler. Broad ...

  6. android EventBus的简单使用

    今天,简单讲讲Android里关于EventBus的使用. 这几天,由于面试的缘故,我听到了很多Android的流行框架,但是之前自己在公司做APP时并没有使用,所以没有了解.于是在网上查找了资料,学 ...

  7. android EventBus的简单使用

    今天,简单讲讲Android里关于EventBus的使用. 这几天,由于面试的缘故,我听到了很多Android的流行框架,但是之前自己在公司做APP时并没有使用,所以没有了解.于是在网上查找了资料,学 ...

  8. Android事件总线(一)EventBus3.0用法全解析

    相关文章 Android事件总线(一)EventBus3.0用法全解析 Android事件总线(二)EventBus3.0源码解析 Android事件总线(三)otto用法全解析 Android事件总 ...

  9. EventBus简单介绍

    EventBus简单介绍 EventBus简单介绍 EventBus作用 EventBus优缺点 EventBus使用步骤 EventBus的三要素(三个角色) Event Subscriber Pu ...

最新文章

  1. Arbitrage--POJ 2240
  2. 刚出炉的一套面试题(JAVA岗)
  3. dwarf tower
  4. vs2019使用webview2开发web浏览器
  5. 滴水穿石--MYSQL导入导出常用命令
  6. JAVA实现telnet代理,对输入命令拦截
  7. docker 容器安装conposer_docker和php:将依赖项(composer)放入容器中
  8. php自增删除开始,PHP的自增自减操作
  9. SharpDX for Winform
  10. Android Studio在线自动升级版本
  11. HyperAttentionDTI: improving drug–protein interaction prediction by sequence-based deep learning wit
  12. 小鸟壁纸 删除 卸载 流氓 鲁大师 360 软件 弹窗 后台
  13. 卡塔尔能源每年将向中石化供应400万吨液化天然气;哪吒汽车发布技术品牌浩智 | 美通企业日报...
  14. Excel中序号自动填充
  15. linux驱动:二、LED灯驱动编写
  16. 石墨文档 Websocket 百万长连接技术实践
  17. 本机ping不通虚拟机解决方法
  18. EOS、BPS怎样进行应用的部署
  19. Retrofit 使用
  20. Fiddler抓包抖音网络错误解决方案

热门文章

  1. STUFF()函数将查询的多行数据合并为一行
  2. 作为有经验的程序员如果不懂Lambda表达式就说不过去了吧,建议收藏!!!
  3. 原神白铁矿位在哪里 原神白铁矿采集点位置分布图
  4. CSDN专访左程云,算法之道
  5. 泥壁鲁(80后 Kevin Yang from ChengDu) 银河帝国 海岛帝国 2012-4月 北美销售额 114w$ IOS(国内前10)...
  6. 科普|一文读懂NFT.Storage 创建过程
  7. web前端基础-HTML篇
  8. 一天一个 Linux 命令(37):killall 命令
  9. java ceil_Java使用Math.ceil舍入为一个int
  10. 1631 小鲨鱼在51nod小学 暴力