Android使用EventBus个人总结

首次开启博客编写之旅,文章仅供个人总结,欢迎进行技术交流。之所以写这篇博客是因为在项目使用中引用fragment与activity之间进行深层次交互,先是使用的接口回调(业务逻辑处理过于繁琐)、其次是用了广播,但后期发现使用广播在多个(三个以上)fragment接收数据时,一些fragment在onReceive中会接收两次(此问题暂未解决,有解决者请指导一下,不胜感激)。好了,下面进入正题:

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。在本文中我使用的是EventBus的线程模式:主线程模式(参考第四步)

ThreadMode.MAIN
1、下载EventBus的类库
源码: https://github.com/greenrobot/EventBus

2、我使用的是AS,故此需要在build.gradle中引入EventBus包,如下:

dependencies {
	compile 'org.greenrobot:eventbus:3.0.0'
}

3、自定义一个类,如下:

/**
 * Eventbus消息
 */
public class MessageEvent {

    public String eventType;
    public Object eventData;

    public MessageEvent() {
    }

    public MessageEvent(String eventType, Object eventData) {
        this.eventType = eventType;
        this.eventData = eventData;
    }
}
4、在接收消息的界面注册,如下是在fragment中注册

/**
 *  2016/11/2 上午11:33:33
 *
 * @param savedInstanceState
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    EventBus.getDefault().register(this);
}
5、在该fragment中定义接收方法,如下:(注意,一定要加入注解)
@Subscribe(threadMode = ThreadMode.MAIN)

@Subscribe(threadMode = ThreadMode.MAIN)
public void handleMessageEvent(MessageEvent messageEvent) {
    if (android.text.TextUtils.equals(messageEvent.eventType, "QACTION_NAME")) {
        //messageEvent为发送过来的消息,自己进行消息处理,QACTION_NAME为定义的action,
         //需与发送一方保持一致      
        boolean refreshFlag = (boolean) messageEvent.eventData;
}} 6、在该fragment中要注意解除注册,如下:

@Override
public void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}
7、发送消息,我是在activity中进行的(activity与fragment通信),如下:

自己定义一个监听事件

String action="QACTION_NAME";//与接收方保持一致
EventBus.getDefault().post(new MessageEvent(action, "这里填写传入的参数,类型自定义"));
好了,整个过程就结束了,步驟很詳細,以後再使用的時候就可以拿來直接引用了



你可能感兴趣的:(EventBus)