Android:EventBus的使用 从此消息传递变得简单

一、首先要说的自然是我准备了好几秒钟的开场白:

最近看别人的Demo看到一个有趣的框架EventBus,挺有趣,也挺好用。看名称个人理解成事件总线,这个总线负责接收发布者的信息转发给订阅者。

不太会画图,暂且看看我用文字粗略表示的“图”:

                          订阅者<——EventBus<——发布者

也就是说发布者在某处发布了一些信息,已经订阅了该信息的订阅者即可收到该信息。

EventBus主要用于代替Intent,Handler,Broadcastreceiver在Activity,Service等之间传递消息。使得代码更加优雅,如果利用得好还能很大程度上解耦。


二、下载安装

使用android studio可以直接在gradle写上:
 compile 'org.greenrobot:eventbus:3.0.0'

三、基本使用

1.自定义一个类,类似java bean
public class MyMessage{
private String msg;
//get,set...
}
2.发送消息,假设要向某个地方发送一条消息“hello”
(1)获取EventBus的对象
 EventBus eventBus= EventBus.getDefault();

  (2)  准备好要发送的消息
MyMessage mMsg=new MyMessage();
mMsg.setMsg("hello");
eventBus.post(mMsg);

  (3)接收消息
3.在要接收消息的地方注册EventBus,同样是使用EventBus对象注册:
eventBus. register(Context context);

注册完成之后在要接收消息的页面写接收方法:
public void onEventMainThread(MyMessage event) {  
  
    String msg = "onEventMainThread收到了消息:" + event.getMsg();  
    Log.d("message", msg);  
    tv.setText(msg);  
    Toast.makeText(this, msg, Toast.LENGTH_LONG).show();  
}  

无论发送线程是否主线程,在该方法执行的时候都是主线程在执行,因此可以放心在该方法执行更新ui操作。但是要注意不能再改方法中进行耗时操作。


四、进阶使用

上面提到在onEventMainThread方法所执行的逻辑都是在主线程中执行的,那么假如我要在子线程中执行又要怎么写呢?
在EventBus中有四个订阅函数:1)onEvent  2)onEventMainThread 3)onEventBackground 4)onEventAsync

onEventBackground:如果消息时间在主线程发布出来的话,那么onEventBackground就会新起一条子线程中运行,如果消息在子线程中发出来的话那么,onEventBackground就会直接在子线程中运行

onEventAsync:与onEventBackground的作用差不多,区别在于无论消息在主线程还是子线程发送,都会新起一条线成执行。


onEvent:如果发送消息所在的线程在主线程那么该方法就会在主线程执行,如果发送消息在子线程那么该方法也会在该子线程执行。





















  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值