为了账号安全,请及时绑定邮箱和手机立即绑定

EventBus使用详解

标签:
Android

写在前面

当我们想通知其他组件或者某些事情发生时,我们通常使用观察者模式,所以在jdk1.5中已经帮助我们实现了观察者模式,只需要简单的继承一些类就可以快速使用,在Android中也有一个类似功能的开源库EventBus,可以很方便的帮我们实现观察者模式;

EventBus github地址

EventBus概述

EventBus的四个接收事件通知函数;
onEvent
如果你的事件在哪个线程发布的那么onEvent就会在哪个线程执行,也就是发布和接收是在同一线程的,使用这个方法时,在接收的函数onEvent不宜做耗时操作,不然会导致事件分发延时;
onEventMainThread
无论你的事件在哪个线程发布的,onEventMainThread都会在UI线程中执行,用于更新UI,不能做耗时操作;
onEventBackgroundThread
如果事件是在UI线程发布的,那么onEventBackgroundThread就会在子线程运行,假如事件本身就是在子线程发布的,那么onEventBackgroundThread则会直接运行在该子线程中;
onEventAsync
无论你在哪里发布事件,都会创建新的子线程去执行onEventAsync;

实践

新建测试类

1

2

3

4

5

6

7

8

9

public class TestEvent

    private String mMsg;  

    public TestEvent(String msg) { 

        this.mMsg = msg; 

    } 

    public String getMsg(){ 

        return mMsg;   

    } 

}

发布事件

1

EventBus.getDefault().post(new TestEvent("The old to the driver"));

订阅通知

接收函数

1

2

3

public void onEventMainThread(TestEvent   event) {     

    Log.i("收到消息了:"+event.getMsg());

}

注意在你订阅的地方进行订阅:EventBus.getDefault().register(this);
取消订阅:EventBus.getDefault().unregister(this);

多个接收函数

1

2

3

4

5

6

7

8

9

10

11

public void onEventMainThread(TestEvent event) { 

    Log.i("TestEvent收到消息了:"+event.getMsg());

 

public void onEventMainThread(TestEvent2 event) { 

    Log.i("TestEvent2收到消息了:"+event.getMsg());

 

public void onEvent(TestEvent3 event) {   

    Log.i("TestEvent3收到消息了:"+event.getMsg());

}

如果你一个地方订阅了多个接收函数,那么你发布的是哪个实例,EventBus就会调用哪个接收函数;

多个地方订阅同一接收函数

Activity1

1

2

3

public void onEventMainThread(TestEvent   event) {     

    Log.i("Activity1收到消息了:"+event.getMsg());

}

Activity2

1

2

3

public void onEventMainThread(TestEvent   event) {     

    Log.i("Activity2收到消息了:"+event.getMsg());

}

如果你多个地方订阅同一实例的接收函数,那么你一旦发布事件,那么这几个地方都会被执行;

总结

好了,归根到底,消息的接收反正是根据你发布的消息参数而定的,EventBus是Android下高效的发布/订阅事件总线机制,可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程之间传递数据,执行方法,特点是代码简洁,是一种发布订阅设计模式(Publish/Subsribe),或称作观察者设计模式;

原文链接:http://www.apkbus.com/blog-719059-63037.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消