EventBus 3.0的使用

示例代码

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //为了看着方便我们将发送事件的方法与注册写在了一起,我们可以在任意位置发送事件

        //发送黏性事件
        EventBus.getDefault().postSticky(new Event());

        //注册EventBus
        EventBus.getDefault().register(this);
        //发送一个事件
        EventBus.getDefault().post(new Event());

    }

    /**
     * 普通的事件监听方法
     */
    @Subscribe
    public void onEvent(Event event) {
        Log.d("onEvent", event.event);
    }

    /**
     * 指定事件监听方法执行的线程
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventThreadMode(Event event) {
        Log.d("onEventThreadMode", event.event);
    }

    /**
     * 接收黏性事件(也可以接受非黏性事件,事件与方法中的参数相同即可)
     */
    @Subscribe(sticky = true)
    public void onEventSticky(Event event) {
        Log.d("onEventSticky", event.event);
    }

    /**
     * 指定优先级
     */
    @Subscribe(priority = 80)
    public void onEventPriority(Event event) {
        Log.d("onEventPriority", event.event);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //移除EventBus
        EventBus.getDefault().unregister(this);
    }

    /**
     * 要发送的事件,自己定义
     */
    public class Event {
        public String event = "接收事件";
    }
}

添加依赖

在项目的build.gradle文件中添加如下依赖:

compile ‘org.greenrobot:eventbus:3.0.0’

发送数据

EventBus.getDefault().post( event);

可以发送的数据包括基本数据类型,可以是字符串,也可以是对象。

取消事件的分发

EventBus.getDefault().cancelEventDelivery(event);//取消指定非黏性事件
EventBus.getDefault().removeAllStickyEvents();//取消全部的黏性事件
EventBus.getDefault().removeStickyEvent(Event.class);//取消指定的黏性事件

接收消息

1.注册eventbus(在各组件的创建的时候注册,如Activity的onCreat方法)

    EventBus.getDefault().register(this);

2.取消注册(在各组件销毁的时候移除避免内存泄漏,如Activity的onDestroy方法)

    EventBus.getDefault().unregister(this);

3.实现监听方法    

    通过方法中的参数区分接收方法
    @Subscribe
    public void onEvent(String string){
        Log.d("EventBus", string +"   默认  " + Thread.currentThread().getName());
    }

指定接收方法的线程

默认执行在发送消息的线程

指定线程的方法 @Subscribe(threadMode = ThreadMode.**)
    ThreadMode是一个枚举类型。它的值如下:
    POSTING: Subscriber在发布消息(调用post函数的线程,默认的线程)的线程中执行。
    MAIN: Subscriber将在Android主线程中执行。
    BACKGROUND: Subscriber在后台线程中执行
    ASYNC: Subscriber在异步线程,也就是在独立的线程中执行。

指定接收方法的优先级

优先级的值为0~100 ,默认优先级为0。通过@Subscribe(priority = 80)指定优先级。
只有在同一个线程中的监听方法才有优先级的比较。

黏性事件

黏性事件就是能接收订阅前发送的事件,但是只能接收最新一次的粘性事件。
发送黏性事件EventBus.getDefault().postSticky(event)
通过设置@Subscribe(sticky = true)来接收黏性事件。默认不接收粘性事件的。
接受黏性事件的方法也可以接受非黏性事件。

EventBus源码:github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EventBus是一种用于Android应用程序发布/订阅事件的库。它遵循发布-订阅模式,允许不同组件之间进行松散耦合的通信。 在基于EventBus 3.0的APP开发,你可以按照以下步骤进行: 1. 添加EventBus依赖 在项目的build.gradle文件添加以下代码: ``` dependencies { implementation 'org.greenrobot:eventbus:3.2.0' } ``` 2. 创建事件类 创建一个事件类,它将包含你需要发送和接收的数据。例如: ``` public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } } ``` 3. 注册订阅者 在需要接收事件的组件,注册订阅者。例如,在Activity: ``` @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); } ``` 4. 发布事件 在需要发送事件的组件发布事件。例如,在Activity: ``` EventBus.getDefault().post(new MessageEvent("Hello, world!")); ``` 5. 处理事件 在订阅者,创建一个方法来处理接收到的事件。例如,在Activity: ``` @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { // Do something with the event Toast.makeText(this, event.message, Toast.LENGTH_SHORT).show(); } ``` 以上就是基于EventBus 3.0的APP开发的基本步骤。通过使用EventBus,你可以轻松地在不同组件之间传递数据,从而实现应用程序的松散耦合通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值