Android中的EventBus

1、分析

EventBus是一个针对Android的事件发布和订阅的框架,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。

优点:开销小,代码更优雅,以及将发送者和接收者解耦。

2、导入

在build.gradle文件中添加compile'org.greenrobot:eventbus:3.0.0'

3、基本用法

1)自定义一个消息类

public enum TransResultEvent {
TRANS_SUCCESS,
TRANS_FAILED,
}

2)在要接收消息的页面注册

public class MainActivity extends Activity {
/**
* @param args
*/

EventBus eventBus = EventBus.getDefault();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);

if (!eventBus.isRegistered(this)) {
eventBus.register(this);
}
}
}

3)发送消息

private void doEvent(TransResultEvent event){
eventBus.post(event);
}

4)接收消息的页面实现

共有四个函数,各函数功能不同,可以根据需求选择性的实现。

 

接收消息的四个函数:onEvent、onEventMainThread、onEventBackgroundThread、onEventAsync

EventBus包含4个ThreadMode:ThreadMode.POSTING(订阅者和post在同一线程)、

          ThreadMode.MAIN(订阅者将在主线程(UI线程)中被调用)、

          ThreadMode.BACKGROUND(订阅者将在后台线程中被调用)、

          ThreadMode.ASYNC(订阅者将在一个独立的线程中被调用,这个线程独立于主线程和post的线程)

 

四个函数的实现方法如下:

    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onMessagePosting(MessageEvent event){
        System.out.println("onMessagePosting===" + event.message +" Thread name==" + Thread.currentThread().getName());
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageMain(MessageEvent event){
        System.out.println("onMessageMain===" + event.message+" Thread name==" + Thread.currentThread().getName());
    }
@Subscribe(threadMode = ThreadMode.BACKGROUND) public void onMessageBackground(MessageEvent event){ System.out.println("onMessageBackground===" + event.message+" Thread name==" + Thread.currentThread().getName()); }
@Subscribe(threadMode = ThreadMode.ASYNC) public void onMessageAsync(MessageEvent event){ System.out.println("onMessageAsync===" + event.message+" Thread name==" + Thread.currentThread().getName()); }


本工程实现的函数为:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(TransResultEvent event) {
switch (event) {
case TRANS_SUCCESS:
Toast.makeText(MainActivity.this, "trans success", Toast.LENGTH_LONG).show();
break;
case TRANS_FAILED:
Toast.makeText(MainActivity.this, “trans failed”, Toast.LENGTH_LONG).show();
break;
}
}

5)解除注册

@Override
protected void onDestroy() {
super.onDestroy();
if (eventBus.isRegistered(this)) {
eventBus.unregister(this);
}
}
posted on 2017-05-09 16:28  晨小主  阅读(584)  评论(0)    收藏  举报