EVENT BUS 的初识

进行数据的传递,其实与其导入一个这么大的地三方框架,还不如使用接口来的轻便。EventBus是一个事件发布和订阅的框架。

使用的步骤原理方式是:

1、Android studio导入:compile'org.greenrobot:eventbus:3.0.0'

2、定义事件类型:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class MessageEvent {  
  2.     public final String message;  
  3.   
  4.     public MessageEvent(String message) {  
  5.         this.message = message;  
  6.     }  
  7. }  

3、订阅者:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Subscribe  
  2. public void onMessageEvent(MessageEvent event){  
  3.     Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();  
  4. }  
  5. @Subscribe  
  6. public void handleSomethingElse(SomeOtherEvent event){  
  7.     doSomethingWith(event);  
  8. }  
4、注册及解绑EventBus

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Override  
  2. public void onStart() {  
  3.     super.onStart();  
  4.     EventBus.getDefault().register(this);  
  5. }  
  6.   
  7. @Override  
  8. public void onStop() {  
  9.    EventBus.getDefault().unregister(this);  
  10.     super.onStop();  
  11. }  
5、发送事件

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. EventBus.getDefault().post(new MessageEvent("Hello everyone!"));  
OK,这就是EventBus的简单用法。对于上述代码,需要注意的是:发送事件的类中不需要进行 注册及解绑EventBus,但在订阅者所在的类中则需要进行注册及解绑EventBus。EventBus中事件的发送及订阅是通过事件类型,即本例中的MessageEvent,进行匹配的。

详细讲解:

EventBus包含4个ThreadModeThreadMode.POSTING、ThreadMode.MAIN、ThreadMode.BACKGROUND、ThreadMode.ASYNC

例:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Subscribe(threadMode = ThreadMode.POSTING)   
  2. public void onMessage(MessageEvent event) {  
  3.     log(event.message);  
  4. }  
ThreadMode.POSTING:默认使用该模式,表示该方法会在当前发布事件的线程执行

ThreadMode.MAIN:表示会在UI线程中执行

ThreadMode.BACKGROUND:若当前线程非UI线程则在当前线程中执行,否则加入后台任务队列,使用线程池调用

ThreadMode.ASYNC:加入后台任务队列,使用线程池调用

Sticky Events的用法

简单来说,若之前事件使用postSticky进行发布且执行过,则当sticky为true的订阅者再次订阅时,会去stickyEvents去查找事件,然后立即去post执行。

例:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));  
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Subscribe(sticky = true)  
  2.     public void onEvent(MessageEvent event) {  
  3.         textField.setText(event.message);  
  4.     }  
若必要也可以移除之前发布过的 postSticky,例:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);  
  2. // Better check that an event was actually posted before  
  3. if(stickyEvent != null) {  
  4.     EventBus.getDefault().removeStickyEvent(stickyEvent);  
  5. }  
Subscriber Priorities(优先级)

这个没什么好说的,只需要知道优先级越高越优先执行,默认的优先级为0,使用例:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @Subscribe(priority = 1);  
  2. public void onEvent(MessageEvent event) {  
  3. …  
  4. }  

到这就学完了。

http://blog.csdn.net/wl1769127285/article/details/51065015
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值