EvenBus初学

来源:互联网 发布:数据库事务 编辑:程序博客网 时间:2024/06/06 02:33

EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

下面结合自己写的一个小例子说说具体的用法:

例子中,有一个FristActivitySecondActivity,由FristActivity跳转至SecondActivity,点击SecondActivity中的按钮,开始时间分发(其实就是传递一个String的字符串),在FristActivity中接收并显示出来,在我们没有学习这个之前,像这种情况一般使用StartActivityForResult

/OnActivityResulr解决,其实就是intent嘛。那么,用EvenBus实现起来又是哪种效果呢。

首先,Build.gradle中引入EvenBus包:
compile 'org.greenrobot:eventbus:3.0.0'

在我们开始使用evenBusFristActivity中的Oncreate方法中注册:

EventBus.getDefault().register(this);

防止忘记,在OnDestory方法中注销:

EventBus.getDefault().unregister(this);

接着,定义一个事件类FristEvent

public classFirstEvent {
    private String mMsg;
    public FirstEvent(String msg){
        mMsg = msg;
    }
    public String getMsg(){
        return mMsg;
    }
}

SecondActivity的触发该事件的位置,为事件赋上所需要传递的值:

EventBus.getDefault().post(newFirstEvent("FirstEvent btn has beclicked"));

回到FristActivity中取出我们传递的值:

@Subscribe(threadMode = ThreadMode.MAIN)
public void first(FirstEvent event){
    String mas =event.getMsg();
    textView.setText(mas);
    Toast.makeText(this,mas,Toast.LENGTH_LONG).show();
}

这算是基本完成了。下面补充一点接收threadMode得区别:

onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,
            onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,
            因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那onEventBackground就会在
            子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground
            函数直接在该子线程中执行。
onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,
         都会创建新的子线程在执行onEventAsync。


附上demo源码链接:https://github.com/zhong19930928/EvneBus_Demo点击打开链接


原创粉丝点击