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

来源:互联网 发布:淘宝可以延长收货几天 编辑:程序博客网 时间:2024/05/17 02:16

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

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

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

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

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

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


二、下载安装

源码:https://github.com/greenrobot/EventBus
使用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:如果发送消息所在的线程在主线程那么该方法就会在主线程执行,如果发送消息在子线程那么该方法也会在该子线程执行。





















1 0
原创粉丝点击