Android实战-初探EventBus

最近项目中需要实现一个功能,当用户要发布一条消息时,在当前activity堆栈中可能存在多个页面需要感知到这一事件,并将这条消息显示在最顶端。一开始想到用广播去实现,但是广播会让所有的应用都接收到广播,虽然可以过滤掉;后来寻找解决方案的过程中发现了EventBus,它提供的解决方案非常优雅,这里记录一下。(LocalBroadcastManager也可以实现,但是代码比起EventBus来说复杂一些)

实现上述功能所需代码示例如下:
1、定义一个事件
public class PublishDynamicEvent{
    private Dynamic dynamic;
    private Dynamic sendingDynamic;
    public PublishDynamicEvent(Dynamic dynamic, Dynamic sendingDynamic) {
        this.dynamic = dynamic;
        this.sendingDynamic = sendingDynamic;
    }
    public Dynamic getDynamic(){
        return dynamic;
    }
    public Dynamic getSendingDynamic() {
        return sendingDynamic;
    }
}
2、在需要感知该事件发生的activity中添加下述方法:
public void onEventMainThread(PublishDynamicEvent event) {
    …//处理该事件
}
在onCreate方法中注册:
@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    EventBus. getDefault().register(this);
}
在onDestroy方法中取消注册:
@Override
protected void onDestroy(){
    super.onDestroy();
    EventBus. getDefault().unregister(this);
}

3、在发布该事件的地方添加下面一句话:
EventBus. getDefault().post(new PrePublishDynamicEvent(dynamic));

是不是非常简单,可读性和灵活性都很高。EventBus应用的场景非常广泛,传统的事件传递方式包括:Handler、BroadCastReceiver、Interface 回调等都可以用用它来替代,再举个常见的例子:你的某些页面需要在接收到某些推送通知时,在布局上发生相应变化,诸如显示小红点,新消息数之类的提醒,都可以使用EventBus。

参考:
EventBus 源码解析

你可能感兴趣的:(Android开发,android)