Android事件总线Android开发android 开发程序员

EventBus笔记--基本使用

2017-07-21  本文已影响57人  MinuitZ

EventBus直译过来,叫做消息总线 , 可以简化应用程序内各组件间、组件与后台线程间的通信. 比如,Activity之间的通信 ,主线程与子线程的通信 ,Service于Activity的通信,Fragment与Fragment的通信, 都可以使用该开源库方便的处理. 使用该框架,你只需要考虑谁是订阅者, 谁是发布者就可以了.

EventBus -- 基本使用
EventBus源码 -- 注册
EventBus源码 -- 发送消息
EventBus源码 -- 注销

gradle依赖####

compile 'org.greenrobot:eventbus:3.0.0' 笔者在使用时为3.0版本
记住 是org开头, org org org, 不是de

基本概念####

EventBus的github中写到了使用方法, 但对于完全没有接触过的人来说, 理解起来还是有些困难的. 用一张图给大家描述一下.

自助火锅

自助火锅都吃过的哈, 厨房吧处理好的食材放到传送带上, 交钱入座的客户就可以在传送带上拿到食材
也许我们的GreenRobot也是受此启发.......
类比一下我们的EventBus, 总体来说的模式就是: 发送者把事件发送到总线中, 订阅者订阅了之后就可以收到消息了

1. 消息 (菜品)
2. 订阅者(顾客)
3. 发送者(厨房)

吃过火锅的朋友们到这里应该基本理解EventBus的使用方法了,接下来就是具体的代码编写. 这里先简略的写个demo举例子

步骤####

Demo
Activity与Fragment
需求描述: 在Activity中嵌入一个Fragment,点击Activity中的按钮,可以发送消息到Fragment中并展示出来

  1. 准备消息: 就是一个实体类的写法


  2. 在订阅者(Fragment)中,进行注册和注销, 相当于缴费就坐


  3. 发送消息(把菜放到传送带中)


  4. 在Fragment中接收消息,并使用(就做的客人拿到菜品)


按照以上的流程,你就学会了最基本的EventBus的用法,接下来上效果图


效果图

详谈 EventBus

会了最基本的使用之后,我们来正经的梳理一下

  1. EventBus的三要素:
  1. 线程模型, 也就是在注解中写的threadMode:
  1. 粘性事件
    普通的消息是发送就可以接收, 而粘性事件是先暂存在内存中, 要求在使用时再拿到数据. 其实套路也是大同小异的.
注销粘性事件

那些坑

  1. 在@Subscribe注解下的方法必须为public, 否则会报错.
  2. 订阅者的接收参数必须为包装类
  3. EventBus的注册是在订阅者(接收消息)中写的, 因为EventBus的注册必须与@Subscribe注解写在同一个类, 否则会报错.
  4. EventBus在注册的时候,会将注册者的订阅事件信息保存在一个HashMap中 , 也就是说,可以多次注册. 在不及时销毁的情况下, 发布一个消息, 可能会引起消息传递混乱. 在这里给出以下建议:
    • 将EventBus的注销写在onPause中,注册写在OnResume中
    • 在每次注册注销的时候引入一个boolean变量记录是否注册, 避免重复注册. 记得在注销的时候重置变量.
  5. 由于EventBus的耦合性太低 , 在多次使用时候 ,往往不知道哪里可以接收, 极大的降低了可读性 , 这里推荐一个插件 , 可以方便的标记EventBus的发布与接收:EventBus3 IntelliJ Plugin, 效果图如图所示:

点击按钮即可找到发布或者接收的代码片段.(个人感觉 , 同时加上注释吧最好)

具体的情况请参照实际需求使用

上一篇 下一篇

猜你喜欢

热点阅读