EventBus 3.0的使用

本文介绍了EventBus作为Android高效事件总线的应用场景与实现方式。它替代了传统Intent等方法,简化了Fragment、Activity间的数据传递。文章详细阐述了EventBus的安装配置、事件类定义、事件订阅与发布的步骤,并提供了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

1、EventBus是Android下高效的发布/订阅事件总线机制。作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程之间传递数据,执行方法。特点是代码简洁,是一种发布订阅设计模式(Publish/Subsribe),或称作观察者设计模式。

2、EventBus 3.0 最新的特性就是加入了注解,通过注解的方式 告知订阅函数运行在哪个线程中。

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

具体使用

1、Gradle中添加引用

compile 'org.greenrobot:eventbus:3.0.0'
2、定义一个事件类

public class DataEvent {
    private String msg;

    public DataEvent(String msg) {
        super();
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }
}
3、事件订阅和取消

添加订阅:

EventBus.getDefault().register(this);//订阅
取消订阅:

EventBus.getDefault().unregister(this);//解除订阅

在具体代码中应用:

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	EventBus.getDefault().register(this);
}

@Override
protected void onDestroy() {
	super.onDestroy();
	EventBus.getDefault().unregister(this);
}
4、发布者发布事件:
EventBus.getDefault().post(new DataEvent("我来发布消息"));

5、订阅事件处理:

@Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行
public void onDataEvent(DataEvent event) {
	Log.d("接收者", "event----" + event.getMsg());
}
ThreadMode总共四个:MAIN UI主线程;BACKGROUND 后台线程;POSTING 和发布者处在同一个线程;ASYNC 异步线程。

其他:

1、订阅事件的优先级:

//事件的优先级类似广播的优先级,优先级越高优先获得消息
@Subscribe(threadMode = ThreadMode.MAIN,priority = 100) //在ui线程执行 优先级100
public void onDataSynEvent(DataSynEvent event) {
}
2、终止事件往下传递:

//发送有序广播可以终止广播的继续往下传递,EventBus也实现了此功能
EventBus.getDefault().cancelEventDelivery(event) ;//优先级高的订阅者可以终止事件往下传递
3、混淆处理

-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值