EventBus简单使用

Posted xiaoleiacm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EventBus简单使用相关的知识,希望对你有一定的参考价值。

EventBus是一个开源的事件总线框架,可方便的实现事件消息的收发,可方便的替代handler,asyc等,实现程序的解耦合。

EventBus github地址:https://github.com/greenrobot/EventBus

Eventbus 官方网址:http://greenrobot.org/eventbus/


EventBus的使用:

1  导入工程: 在Gridle下添加:

compile 'org.greenrobot:eventbus:3.0.0'


2  定义所发消息内容:

public class MessageEvent 
    public final String message;

    public MessageEvent(String message) 
        this.message = message;
    

3 在调用的类下添加注册函数:

//注册
EventBus.getDefault().register(this);
//注销
EventBus.getDefault().unregister(this);


@Override
public void onStart() 
    super.onStart();
    EventBus.getDefault().register(this);


@Override
public void onStop() 
   EventBus.getDefault().unregister(this);
    super.onStop();


注册完毕之后需要在类中写出处理函数:

@Subscribe
public void onMessageEvent(MessageEvent event)
    Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();


注意:这里使用注解的方式识别处理函数 @Subscribe

处理函数模式:

对于处理函数可以分为四种不同的处理模式ThreadMode:

ThreadMode: POSTING

@Subscribe(threadMode = ThreadMode.POSTING) // ThreadMode is optional here
public void onMessage(MessageEvent event) 
    log(event.message);
处理函数运行在当前线程里,如果当前线程时UI线程,则运行在UI线程中。

ThreadMode: MAIN

// Called in android UI's main thread
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessage(MessageEvent event) 
    textField.setText(event.message);

处理函数运行在UI线程(主线程)中,通常用于更新页面。

ThreadMode: BACKGROUND

// Called in the background thread
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessage(MessageEvent event)
    saveToDisk(event.message);
处理函数在后台运行,如果当前线程不是主线程(UI线程)则处理在当前线程中运行,如果当前线程是UI(主线程)时,则开辟一个新的线程处理相应操作。

ThreadMode: ASYNC

// Called in a separate thread
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessage(MessageEvent event)
    backend.send(event.message);
处理函数直接开辟新的线程处理相应操作。

处理函数优先级priority:

 @Subscribe(priority = 1,threadMode = ThreadMode.BACKGROUND)
    public void onEdThread(MessageEvent event) 
        System.out.println("onEdThread 2 :" + event.message);

    

优先级数字越大,优先级越高,得到消息处理越靠前,但是优先级只能在同种ThreadMode下才有效,不同ThreadMode没有效果。

消息的发送:

对于消息的发送可在注册的类中任意发送

EventBus.getDefault().post(new MessageEvent("Hello everyone!"));


EventBus的简单应用就是这样,真的是一个非常方便好使的消息处理框架。











以上是关于EventBus简单使用的主要内容,如果未能解决你的问题,请参考以下文章

android EventBus的简单使用

EventBus简单使用

EventBus简单使用

动手造轮子:实现一个简单的 EventBus

EventBus在Android中的简单使用

Android 第三方类库简单使用之EventBus