注意:
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 ...
随机推荐
- 【转】JavaScript 经常忽略的 7 个基础知识点
原文转自:http://bbs.html5cn.org/thread-83442-1-1.html 1. 在 String.prototype.replace 方法中使用 /g 和 /i标志位 令很多 ...
- 第三个Sprint冲刺事后诸葛亮报告
用户反馈:还好吧. 用户数量:4 团队改进建议:思维局限太大,技术需要革新. 1.每个成员第一个sprint阶段有何需要改进? 成员 需要改进 邵家文 需要提高自己的工作效率,与创新能力,解决问题的能 ...
- block中如何避免循环引用
使用 weak–strong dance 技术 block 可以直接引用 self,但是要非常小心地在 block 中引用 self.因为在 block 引用 self,可能会导致循环引用.如下例所示 ...
- i5 6300HQ 和 i7 6700HQ
i7 6700HQ: 四核八线程 14nm 45W 2.6-3.5GHz 支持DDR4 2133内存 三级缓存6M HD Graphics 530集显 i5 6300HQ: 四核四线程 14nm 45 ...
- Android应用开发是否应避免使用枚举?
在Android Froyo版本之前, 官方文档Performance Tips中有"Avoid Enums Where You Only Need Ints", 后来该部分被去掉 ...
- C++继承,多重继承,虚继承的构造函数以及析构函数的调用顺序问题
#include <iostream> using namespace std; class A{ int data_a; public: A(){ data_a = ; cout < ...
- 新冲刺Sprint3(第四天)
一.Sprint介绍 实现了SQLite数据库记录自动登录.注销功能 真机测试效果图: 二.Sprint周期 看板: 燃尽图:
- Html菜鸡大杂烩
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Ionic2学习笔记
Component nav: <ion-nav [root] = 'rootComponent'></ion-nav> ....import {Nav} from 'ionic ...
- odoo server命令行以及配置文件
odoo server 启动时 def main(args): check_root_user() odoo.tools.config.parse_config(args) check_postgre ...