注意:
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());)。这样就可以啦。
- eventbus是必须先订阅,才能传值的,你新activity还没有生成,也就还没有订阅成功,你就post值,肯定是接收不到的。
- 先post的,再rigister的,肯定没有获取不到数据。
- EventBus要先生产(注册)才能消费(订阅),新的activity没有注册监听,它怎么能收到订阅
- 有一个叫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)主要作用:组件之间相互通讯、线程之间相互通讯等
- com.google.common.eventbus.EventBus介绍
以下内容直接翻译了EventBus的注释: com.google.common.eventbus.EventBus介绍: 首先这个类是线程安全的, 分发事件到监听器,并提供相应的方式让监听器注册它们自 ...
- Android消息传递之EventBus 3.0使用详解
前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...
- EventBus使用介绍
EventBus是Android下高效的发布/订阅事件总线机制.作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程 ...
- EventBus实现activity跟fragment交互数据
最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...
- 快速Android开发系列通信篇之EventBus
先吐槽一下博客园的MarkDown编辑器,推出的时候还很高兴博客园支持MarkDown了,试用了下发现支持不完善就没用了,这次这篇是在其他编辑器下写的,复制过来后发现..太烂了.怎么着作为一个技术博客 ...
- ABP(现代ASP.NET样板开发框架)系列之1、ABP总体介绍
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP总体介绍
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点, ...
- EventBus
EventBus GitHub 上的地址 https://github.com/greenrobot/EventBus EventBus干的事情可以概括来说 别人可以根据某一个事件订阅我,但是他得去实 ...
- Android项目实战(十三):浅谈EventBus
概述: EventBus是一款针对Android优化的发布/订阅事件总线. 主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service. 线程之 ...
- Android EventBus实战 没听过你就out了
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/40794879,本文出自:[张鸿洋的博客] 1.概述 最近大家面试说经常被问到Ev ...
随机推荐
- Ansible-Tower快速入门-8.创建组织【翻译】
创建组织 首行,点击组织标签,组织中将包括有:用户,团队,项目,和清单等项,在tower的对象层级中,组织是最高级对象. 然后,点击增加按钮,如: 为所创建的组织键入一个简单的名称和描述,这些信息你在 ...
- 从指定的URL下载文件
通过使用URLDownLoadToFile函数,我们能从指定的URL下载文件,保存到本地,并且下载的文件类型可以是可执行文件 实例如下,http://www.xuexic.com 的根目录下存在一个l ...
- Uncaught TypeError: Cannot read property 'msie' of undefined
因为图方便,抄了别人写的一个jquerry插件,运行时“var pos = ($.browser.msie && parseInt($.browser.version) <= 6 ...
- C语言文件处理
数据存储方式: 数据->变量->文件 数据 10个学生的信息: #define N 10 struct student { char stu_num[15]; char stu_name[ ...
- Unity3D–RectTransfrom 记录笔记
一.基本要点 部分来源:http://www.2fz1.com/post/unity-ugui-recttransform/ RectTransform继承于Trasnfrom , 在Trasnfor ...
- (实用篇)php支付宝接口用法分析
本文实例讲述了php支付宝接口用法.分享给大家供大家参考.具体分析如下: 现在流行的网站支持平台,支付宝当仁不让的老大了,现在我们就来告诉你如何使用支付宝api来做第三方支付,把支付宝放到自己网站来, ...
- cocoapods:安装/更新Ruby环境教程
简介 有时候在安装cocoapods时会产生如下错误 ERROR: Error installing cocoapods: activesupport requires Ruby version &g ...
- 关于Ubuntu共享文件夹的设置
一.Xshell连接虚拟机(先关闭虚拟机的防火墙) sudo apt-get install openssh-serve sudo ufw disable sudo ufw allow 22 二.虚拟 ...
- golang flag包
go flag 包用来解析命令行参数,通过一个简单的例子来了解下 package main import ( "flag" "fmt" ) fu ...
- 初学Laravel
之前一直用开tp和ot,本来觉得学会一个tp便可走遍天下,tp的确强大.但后来听到很多同行的同学说他们的公司都开始转型往lv走了,我的同学没有学过lv,然而公司给足时间去让他们去学.当然,缺人可能是占 ...