EventBus事件总线分发库
2016-07-13 14:15
295 查看
compile 'de.greenrobot:eventbus:2.4.0'
1)使用起来特别简单,但是要懂原理;
2)要注意使用的步骤和流程;
3)主要作用:组件之间相互通讯、线程之间相互通讯等
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!
post()方法里面的类型和onEvent()中的类型要一致。
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(对象)
事件总线分发流程:
描述了发布者和订阅者的关系。即:一个发布者 发布事件到总线,总线分发给订阅者。
观察者模式
按钮触发监听事件—->EventBus发送消息—->EventBus接收消息—->处理接收到的消息。
安卓平台上一个用于Activity,Fragment,Thread,Service被优化简化的通讯协议。少代码,高质量
它自定义事件类的功能特别强大, 有了这样定制消息的功能,我们就可以个性化消息,来对消息进行分类。
在EventBus中的观察者通常有四种订阅函数(就是某件事情发生被调用的方法)
1、onEvent()
2、onEventMainThread()
3、onEventBackground()
4、onEventAsync()
该方法将会在同一个线程来调用,避免了线程之间的切换,比如你是在主线程发送的消息,那么将会运行在主线程,如果为其他线程,那么将在其他线程调用。
// 在相同线程里调用 (默认)
public void onEvent(MessageEvent event) {
log(event.message);
}
将会在主线程调用,如果本身就在主线程,将直接调用
// 在主线程(UI线程)调用
public void onEventMainThread(MessageEvent event) {
//进行UI操作
textField.setText(event.message);
}
// 在后台线程调用
public void onEventBackgroundThread(MessageEvent event){
//进行耗时操作
saveToDisk(event.message);
}
观察者模式:
1、定义一个事件,这个事件一旦被EventBus分发出去就是代表某一件事情发生了,这个事件就是某个观察者关心的事情(不需要继承任何类)
2、定义观察者,然后将该观察者注册到EventBus
3、由EventBus分发事件,告知观察者某一件事情发生了.
1)使用起来特别简单,但是要懂原理;
2)要注意使用的步骤和流程;
3)主要作用:组件之间相互通讯、线程之间相互通讯等
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!
post()方法里面的类型和onEvent()中的类型要一致。
package com.lantu.tuhuadmin.eventbus; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import de.greenrobot.event.EventBus; /** * Created on 2016/7/13. * Author:chenrushui * Description:一处点击发送数据,另一处或者多处可以及时获取更新传递过来的数据 * 设计知识点:事件类自定义、注册、订阅事件、事件的发布、数据解析、取消注册; */ public class FirstActivity extends Activity implements View.OnClickListener { private Button btn_send; private TextView tv_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); initViews(); initListener(); //注册一个事件接收者 EventBus.getDefault().register(this); } private void initListener() { btn_send.setOnClickListener(this); } private void initViews() { btn_send = (Button) findViewById(R.id.btn_send); tv_content = (TextView) findViewById(R.id.tv_content); } //EventBus默认的接收事件处理的方法 public void onEvent(MyEvent myEvent) { if (myEvent.getType().equals("0")) { tv_content.setText(myEvent.getContent()); } } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_send: { //点击操作就是发送数据事件 //自定义事件类 MyEvent myEvent = new MyEvent(); myEvent.setType("0"); myEvent.setContent("待传递的数据111"); EventBus.getDefault().post(myEvent); } break; } } @Override protected void onDestroy() { super.onDestroy(); //取消EventBus注册 EventBus.getDefault().unregister(this); } }自定义事件类:
package com.lantu.tuhuadmin.eventbus; /** * Created on 2016/7/13. * Author:chenrushui * Description:XXX */ public class MyEvent { private String type; private String content; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
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(对象)
事件总线分发流程:
描述了发布者和订阅者的关系。即:一个发布者 发布事件到总线,总线分发给订阅者。
观察者模式
按钮触发监听事件—->EventBus发送消息—->EventBus接收消息—->处理接收到的消息。
安卓平台上一个用于Activity,Fragment,Thread,Service被优化简化的通讯协议。少代码,高质量
它自定义事件类的功能特别强大, 有了这样定制消息的功能,我们就可以个性化消息,来对消息进行分类。
在EventBus中的观察者通常有四种订阅函数(就是某件事情发生被调用的方法)
1、onEvent()
2、onEventMainThread()
3、onEventBackground()
4、onEventAsync()
该方法将会在同一个线程来调用,避免了线程之间的切换,比如你是在主线程发送的消息,那么将会运行在主线程,如果为其他线程,那么将在其他线程调用。
// 在相同线程里调用 (默认)
public void onEvent(MessageEvent event) {
log(event.message);
}
将会在主线程调用,如果本身就在主线程,将直接调用
// 在主线程(UI线程)调用
public void onEventMainThread(MessageEvent event) {
//进行UI操作
textField.setText(event.message);
}
// 在后台线程调用
public void onEventBackgroundThread(MessageEvent event){
//进行耗时操作
saveToDisk(event.message);
}
观察者模式:
1、定义一个事件,这个事件一旦被EventBus分发出去就是代表某一件事情发生了,这个事件就是某个观察者关心的事情(不需要继承任何类)
2、定义观察者,然后将该观察者注册到EventBus
3、由EventBus分发事件,告知观察者某一件事情发生了.
相关文章推荐
- Android 中 EventBus 的使用之多线程事件处理
- EventBus3.0详解
- Spring4 版 eventbus 事件通信 事件驱动 介绍
- EventBus3.0学习笔记
- EventBus
- eventbus/documentation/delivery-threads-threadmode
- eventbus/documentation/how-to-get-started/
- EventBus Demo
- android EventBus
- EventBus基本设计思路
- EventBus(二)------从register这条线分析EventBus
- EventBus(三)-----从post这条线分析EventBus
- EventBus(四)-----简单应用
- EventBus的使用以及原理
- EventBus 学习
- EventBus 学习进阶
- EventBus使用小坑
- eventbus简单使用
- Android EventBus实战 没听过你就out了
- 都在说EventBus,我也来一波EventBus