EventBus--介绍

时间:2022-09-12 21:39:11
注意:
1,post()方法里面的类型和onEvent()中的类型要一致。,
2,订阅者对象中 必须有 onEvent 的 public 方法     ---public void onEvent(Object event) { //接收消息 }
3, EventBus是一款针对Android优化的发布/订阅事件总线。
主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
在Activity中的onCreate和onDestroy里分别注册和解除注册,并且声明public void onEvent(FirstEvent event) { } 等几个函数就可以了。
要说明的是EventBus是一个进程范围内的发布/订阅时间总线,所以只能在一个进程内进行订阅和发布,如果你在新的进程里给Service/Activity发送消息,就无法收到消息了。
本质上来说,EventBus是一个在进程内给不同的类发送消息的事件总线,不论是Activity或是Service都可以。
 
5,FirstActivity , 注册eventBus, onEvent()方法, SecondAct发送消息: 点击按钮从FirstAct跳到 SecondAct。
可以在 解决-----在前一个Activity注册的时候,把目标的Activity实例化注册,就可以传参数了.或
在发送EventBus post请求之前 ,在发送Activity实例化目标Activity (这样:EventBus.getDefault().register(new 目标Activity());)
或者 重写一个MainApplication里面(EventBus.getDefault().register(new 目标Activity());)。这样就可以啦。
  1. eventbus是必须先订阅,才能传值的,你新activity还没有生成,也就还没有订阅成功,你就post值,肯定是接收不到的。
  2. 先post的,再rigister的,肯定没有获取不到数据。
  3. EventBus要先生产(注册)才能消费(订阅),新的activity没有注册监听,它怎么能收到订阅
  4. 有一个叫delayXXX的方法可以

3,--EventBus 与otto的区别

3,--EventBus 与 Activity,BraodCast,Service之间传递数据?

2,-- Event Bus基本用法
 
分订阅、注册、发布、取消订阅;主体都是谁?
注册:EventBus提供了三个构造方法
EventBus.getDefault().register(this);
EventBus.getDefault().register(new MyClass());
//三个参数分别为:消息订阅者(接收者),接收方法名,事件类(里面可以定义要传递的属性)
EventBus.getDefault().register(this, ”setTextA”, TextA.CLASS);
 
取消注册: 一般都是在ondestory()方法里面进行取消注册,释放资源!取消注册,只需要传递消息订阅者就可以了。
EventBus.getDefault().unregister(this);
EventBus.getDefault().unregister(new MyClass());
EventBus订阅处理数据:
EventBus支持四种模式,--主线程的数据处理,交互式线程,后台线程和异步线程。
onEventMainThread(),  onEvent(),   onEventBackgroundThread()。
 
发布:支持直接发布以及 支持 发布滞留消息:
EventBus.getDefault().post(对象);
postStickyEvent();
观察者模式::
按钮触发监听事件—->EventBus发送消息—->EventBus接收消息—->处理接收到的消息。
安卓平台上一个用于Activity,Fragment,Thread,Service被优化简化的通讯协议。少代码,高质量
它自定义事件类的功能特别强大, 有了这样定制消息的功能,我们就可以个性化消息,来对消息进行分类。
在EventBus中的观察者通常有四种订阅函数(就是某件事情发生被调用的方法)
1、onEvent()
2、onEventMainThread()
3、onEventBackground()
4、onEventAsync()
该方法将会在同一个线程来调用,避免了线程之间的切换,比如你是在主线程发送的消息,那么将会运行在主线程,如果为其他线程,那么将在其他线程调用。
// 在相同线程里调用(默认):在onEvent方法中不能执行耗时的操作,如果执行,则导致事件分发延迟。
    public void onEvent(MessageEvent event) {
        log(event.message);
}
// 在主线程(UI线程)调用--不论发送事件者在那个线程,接受事件都 将会在主线程调用,
    public void onEventMainThread(MessageEvent event) {
        textField.setText(event.message);   //进行UI操作
}
// 接收者直接在后台线程
如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
   public void onEventBackgroundThread(MessageEvent event){
       saveToDisk(event.message);     //进行耗时操作
   }
onEventAsync();---使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.
1.1 --Event Bus 和 Otto事件总线分发库
什么是事件总线管理?
1)将事件放到队列里,通过队列进行事件的管理和分发!
2)保证应用的各个部分之间高效的通讯及数据、事件分发!
3)模块之间的解耦! 不用写网络请求接口回调了,直接通过EventBus传递数据。(通过接口回调传递数据、通过EventBus传递数据)
Event Bus是一个发布/订阅的事件总线。
Event Bus模式也被称之为Message Bus或者 发布者/订阅者模式,可以让两个组件相互通信,但是它们之间并不相互知晓。有些类似于(广播机制)。
1)在需要接收信息的地方,进行一个订阅和注册;
2)在发送数据的地方进行发布
3)然后在订阅的地方就可以收到,并进行处理。
基于事件总线管理/订阅/分发模式。事件响应有更多线程选择,EventBus可以向不同的线程中发布事件。
使用时需要先注册订阅,发布者然后向订阅者分发消息数据即可。
订阅者可以订阅多个事件,发布者可以发布任何事件;发布者同时也可以是订阅者。分订阅、注册、发布、取消注册等步骤。
 
Event Bus包含四个部分:发布者、订阅者、事件、总线。
Event Bus分发流程:
1)发布者首先把它的事件传递到Event Bus事件总线里面进行管理,等待分发;
2)事件总线按照相应的逻辑,把事件发布给定阅者;
3)然后订阅者就可以接收到数据(通过对应的方法进行接收),进行相应的处理。
Event Bus基于标准的命名规范,注解模式比较消耗内存,所以Event Bus效率上要高一些。
Event Bus支持交互线程的事件传递(支持主线程和子线程的通讯)Event Bus传递效率比较快。基于数据解耦通讯的相关app!
 
1,--EventBus 基本信息:
 
compile 'de.greenrobot:eventbus:2.4.0'
1)使用起来特别简单,但是要懂原理;
2)要注意使用的步骤和流程;
3)主要作用:组件之间相互通讯、线程之间相互通讯等

EventBus--介绍的更多相关文章

  1. com.google.common.eventbus.EventBus介绍

    以下内容直接翻译了EventBus的注释: com.google.common.eventbus.EventBus介绍: 首先这个类是线程安全的, 分发事件到监听器,并提供相应的方式让监听器注册它们自 ...

  2. Android消息传递之EventBus 3.0使用详解

    前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...

  3. EventBus使用介绍

    EventBus是Android下高效的发布/订阅事件总线机制.作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程 ...

  4. EventBus实现activity跟fragment交互数据

    最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...

  5. 快速Android开发系列通信篇之EventBus

    先吐槽一下博客园的MarkDown编辑器,推出的时候还很高兴博客园支持MarkDown了,试用了下发现支持不完善就没用了,这次这篇是在其他编辑器下写的,复制过来后发现..太烂了.怎么着作为一个技术博客 ...

  6. ABP(现代ASP.NET样板开发框架)系列之1、ABP总体介绍

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  7. ABP总体介绍

    ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点, ...

  8. EventBus

    EventBus GitHub 上的地址 https://github.com/greenrobot/EventBus EventBus干的事情可以概括来说 别人可以根据某一个事件订阅我,但是他得去实 ...

  9. Android项目实战(十三):浅谈EventBus

    概述: EventBus是一款针对Android优化的发布/订阅事件总线. 主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service. 线程之 ...

  10. Android EventBus实战 没听过你就out了

    转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/40794879,本文出自:[张鸿洋的博客] 1.概述 最近大家面试说经常被问到Ev ...

随机推荐

  1. JBoss QuickStart之深入

    EJB-AsynchronousEJB中提供异步调用的方法. "A session bean can expose methods with asynchronous client invo ...

  2. JQuery获取子节点的第一个元素

    $.children()//全部子节点 $.children(':first')//子节点的第一个

  3. 在linux和windows下自动备份数据库

    摘要: 详细介绍在windows和linux下自动备份数据库的过程,希望可以让新手立即上手吧! 本文档内容共分为2大部分:linux和windows Linux和windows都分为:准备工作和操作阶 ...

  4. Scrum 3.2 多鱼点餐系统开发进度(页面优化&下单详细信息页面)

    Scrum 3.2 多鱼点餐系统开发进度(页面优化&下单详细信息页面)  1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选 ...

  5. c#加密汇总【粘】

    方法一: SHA1[不可逆]     //须添加对System.Web的引用     using System.Web.Security;           ...           /// &l ...

  6. WebGIS前端瓦片地图显示原理及实现

    目前,有很多WebGIS开发包,ArcGIS API for JS.OpenLayers.LeafLetjs等为我们从事WebGIS开发的人封装了很多强大的功能.我们很方便的使用这些库的时候,也让我们 ...

  7. this的用法 – JavaScript深入浅出(二)

    写在前面 上一篇中,我们对于JavaScript中原始值.复杂值以及内存空间进行了一个深入浅出的总结,这次我们来聊一聊JavaScript中this关键字的深入浅出的用法. 在 JavaScript ...

  8. 浅谈cookie和session

    Cookie简介 Cookie(复数形态Cookies),中文名称为“小型文本文件”,指某些网站为了辨别用户身份或存储用户相关信息而存储在用户本地终端(Client Side) 上的数据(通常为加密数 ...

  9. java native用法

    说明: native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中.Java语言本身不能对操作系统底层进行访问和操作,但是可以通过J ...

  10. JSLinux

    JSLinuxhttps://bellard.org/jslinux/vm.html?url=https://bellard.org/jslinux/win2k.cfg&mem=192&amp ...