美文网首页
EventBus3.0防踩坑指南

EventBus3.0防踩坑指南

作者: 张鱼的故事 | 来源:发表于2017-09-22 15:54 被阅读0次

    实用过EventBus的人都知道,这个轻量简便的lib真的很好用,耦合度低,

能满足很多场合的使用,不过3.0貌似更好用了,使用也更灵活了。下面给出

官方的使用地址,大家可以去官网了解熟悉下,EventBus3.0.

    Event的使用,3.0引入管擦着模式,Subscriber:事件订阅者,在EventBus3.0

之前消息处理的方法只能限定于onEvent、onEventMainThread、onEventBackgr

oundThread和onEventAsync,他们分别代表四种线程模型。而在EventBus3.0之后

,事件处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定

线程模型(默认为POSTING),四种线程模型下面会讲到。

       EventBus3.0线程模式

      POSTING(默认):如果使用事件处理函数指定了线程模型为POSTING,那么该事

件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和

接收事件在同一个线程。在线程模型为POSTING的事件处理函数中尽量避免执行耗时操

作,因为它会阻塞事件的传递,甚至有可能会引起ANR。

      MAIN:事件的处理会在UI线程中执行。事件处理时间不能太长,长了会ANR的。

      BACKGROUND:如果事件是在UI线程中发布出来的,那么该事件处理函数就会在

新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件处理函数直接在

发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。

      ASYNC:无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行,

同样,此事件处理函数中禁止进行UI更新操作。

      四种线程,大家可以根据需要对线程进行控制,线程模式是的EventBus使用起来更

加灵活,选择性也更多。说了这么多没用的 下面个大家介绍下到底怎么用

      使用之前,需要先在gradle中添加

      //EventBus

      compile'org.greenrobot:eventbus:3.0.0'

      主要方法 事件订阅,也就是之前的注册  EventBus.getDefault().register(this);

                      取消订阅  EventBus.getDefault().unregister(this);

                      事件发送  EventBus.getDefault().post(messageEvent);

                      事件接收 @Subscribe(threadMode=ThreadMode.MAIN)

                                     public void onMessageEvent(PostEventevent) {}

                      粘性事件  EventBus.getDefault().postSticky() (粘性事件是发送后再订阅,

                                    异于普通事件)

     用法  创建一个java类 public class PostEvent{/**  类的名字没有局限性,可以随意定

               义   */}  EventBus.getDefault().post(new PostEvent()) 这个时候 ,就可以在需

              要的地方发送事件了 onMessageEvent 可以用来接收所发送的事件

      下面给出我的代码截图

MainActivity TestActivity PostEvent

      代码很简单,这里我没有使用粘性事件。上面是根据官方接收的使用方法来实现的

,不过既然是防踩坑,好像跑题了,下面给大家讲解我遇到的情况。

A。

官方使用指南

      官网上说的是要在onStart()中进行订阅,在onStop()中进行取消定语,单貌似这样在

Activity中是行不通的,这样无法接收到事件。熟悉Activity生命周期的都应该知道为什么

吧,这里不再赘述,个人建议,事件订阅放在onCreate()方法中,而注销,要放在onD

estory()中。

B。之前查阅的时候,有人说EventBus3.0要处理不同场所发出的事件的时候要写不同的

java类,这养就要写很多的java事件类,请注意看我上面写的PostEvent类(可根据需

要,自行进行扩展),在这个类中我定义了三个 变量 tag(事件标签 、代号) what(事件

类型,不同事件对应不同类型)event (事件内容)。这样就不需要对应的事件写不同的

java类了,而且,如果写了那么多类,你分得清楚你接收的是哪个java类么?无形中不是

给自己增加了麻烦吗?

      不知道上面的两个问题 ,大家有没有遇到呢?

    总结:1.使用之前,需要先下载,compile'org.greenrobot:eventbus:3.0.0'加到gradle

                   中

               2. 使用常规的订阅及解订阅方式,在需要的地方发送事件,事件类根据自己需

                   要自行定义

              3. 在需要的地方调用 onMessageEvent进行事件接收(订阅过事件一定要解除

                 订 阅,并且 订阅过事件后必须调用onMessageEvent()方法),不要忘了注

                 解@Subscribe(threadMode=ThreadMode.MAIN) 线程根据需要自己切换

       以上为笔者愚见,并且在使用过程中遇到的问题处理方式,工具都是怎么简单怎么

来,易于维护才是王道,当然每个人都有自己得使用心得,适合自己得,才是最好的。

下面给出源码,需要的可以下载看看 http://download.csdn.net/download/qq_27234017/9990752

相关文章

  • EventBus3.0防踩坑指南

    实用过EventBus的人都知道,这个轻量简便的lib真的很好用,耦合度低, 能满足很多场合的使用,不过3.0...

  • JavaScrip-StepPitGuide《JavaScrip

    《JavaScript踩坑指南》JavaScrip-StepPitGuide? 《JavaScript踩坑指南》 ...

  • flutter 国内镜像https://storage.flut

    Flutter配置防踩坑指南 这个镜像不维护了,换成清华的,把原来的环境配置替换成新的就行 清华flutter镜像...

  • 学习演讲,5种最容易踩的坑

    大家好,我叫邓世超。我曾经为了学好演讲,被别人前前后后坑了差不多7万块钱。我想把我踩过的那些坑和防坑指南分享给你,...

  • 不踩坑的财报防坑指南

    1.什么是财报? 从会计角度记录公司所有经营事务的报表,分为季度报表,半年报表,年度报表。 利润表:又叫损益表,主...

  • css粘性定位position: sticky

    css粘性定位position:sticky问题采坑position: sticky 详解(防坑指南)CSS中po...

  • 防坑指南

    结合本人生活中被坑的经历,揭露常见推销手段 1.美容院 一些美容院会在人多的地方,例如超市出口拉客,宣称让你体验,...

  • 防坑指南

    现在生活好了,但是生活压力也大了,所以每个人都想要在工作之余兼职赚更多的钱,但是也怕遇到很多坑。接下来叶子就给大家...

  • 进入币圈炒币1年,我人格分裂了

    防追涨杀跌的指南 今天小韭菜群里,韭菜侠发了一篇数字货币投资的防掉坑指南,其中关于如何防止追涨杀跌的指南,得到标叔...

  • 前端学习安利

    前端面试题nuxt踩坑指南WebGLes6flexboxasync/awaitwebDocsVue keep-al...

网友评论

      本文标题:EventBus3.0防踩坑指南

      本文链接:https://www.haomeiwen.com/subject/bydfextx.html