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的简单应用就是这样,真的是一个非常方便好使的消息处理框架。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EventBus是一个开源的发布-订阅式的事件总线库。下面是一个简单EventBus使用的代码示例: 1. 首先,需要在项目中引入EventBus库。可以通过Gradle或Maven等构建工具添加依赖。 2. 定义事件类。创建一个Java类,作为事件的载体,可以包含需要传递的数据。 ```java public class MessageEvent { private String message; public MessageEvent(String message) { this.message = message; } public String getMessage() { return message; } } ``` 3. 注册事件订阅者。在需要接收事件的地方注册订阅者,并指定订阅的事件类型。例如,在Activity的onCreate方法中注册: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.getDefault().register(this); } ``` 4. 定义事件订阅者的处理方法。在订阅者中定义处理事件的方法,方法需要加上@Subscribe注解,并指定事件类型。 ```java @Subscribe public void onMessageEvent(MessageEvent event) { String message = event.getMessage(); // 处理事件 } ``` 5. 发布事件。在需要发送事件的地方,创建一个事件对象,并使用EventBus的post方法发布事件。 ```java EventBus.getDefault().post(new MessageEvent("Hello EventBus!")); ``` 6. 取消事件订阅。在不需要接收事件的地方,取消注册订阅者。例如,在Activity的onDestroy方法中取消注册: ```java @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } ``` 以上就是一个简单EventBus使用代码示例。通过事件的发布和订阅,可以实现不同组件之间的解耦,方便数据传递和通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值