前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EventBus配置、粘性事件、优先级和取消事件分发

EventBus配置、粘性事件、优先级和取消事件分发

作者头像
用户1108631
发布2019-08-17 13:04:00
1.8K0
发布2019-08-17 13:04:00
举报
文章被收录于专栏:每天学点Android知识

EventBus配置

前面的博客中获取EventBus,都是使用EventBus.getDefault(),而如果需要对EventBus进行配置,那么需要使用EventBus.Builder进行设置。

代码语言:javascript
复制
EventBus eventBus = EventBus.builder()
    .logNoSubscriberMessages(false)
    .sendNoSubscriberEvent(false)
    .build();

粘性事件

一般情况下,发布者将事件发出,如果没有对该事件感兴趣的订阅者,那么这条消息就消失了;而粘性事件则允许,在订阅者后来注册到事件中心,还能收到该事件。 在EventBus简介以及初步使用中,Activity A是订阅者,Activity B是发布者,这儿我们换一下,Activity A发布一个粘性事件,代码如下:

代码语言:javascript
复制
public void downloadPage(View view) {
        EventBus.getDefault().postSticky(new DownloadEvent());
        startActivity(new Intent(this,SecondActivity.class));
    }

Activity B的代码如下:

代码语言:javascript
复制
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        EventBus.getDefault().register(this);
    }

    @Subscribe(sticky = true)
    public void download(DownloadEvent downloadEvent) {
        Toast.makeText(this,"Receive Sticik Event",Toast.LENGTH_LONG).show();
    }

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

当Activity A跳转到Activity B时将会有Toast提示;当把Activity B中download方法的注解stick修改为false后,将不再有Toast提示,从而可以看到粘性事件是如何作用的。

手动获取和取消粘性事件

如果需要手动取消粘性事件,那么可以执行以下代码:

代码语言:javascript
复制
DownloadEvent stickyEvent = EventBus.getDefault().getStickyEvent(DownloadEvent.class);
        if(stickyEvent!=null){
            EventBus.getDefault().removeStickyEvent(stickyEvent);
        }

        DownloadEvent previousEvent = EventBus.getDefault().removeStickyEvent(DownloadEvent.class);
        if(previousEvent!=null){
            EventBus.getDefault().removeStickyEvent(previousEvent);
        }

优先级

Subscribe注解可以使用priority进行修饰,同一分派线程中,优先级越高,订阅方法越先处理。

取消事件分发

代码语言:javascript
复制
@Subscribe
public void onEvent(MessageEvent event){
    EventBus.getDefault().cancelEventDelivery(event) ;
}

一旦取消了事件的分发,事件将不再继续向下进行分发。 一点设想,可以通过优先级+取消事件分发构建拦截链

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 每天学点Android知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • EventBus配置
  • 粘性事件
    • 手动获取和取消粘性事件
    • 优先级
      • 取消事件分发
      相关产品与服务
      事件总线
      腾讯云事件总线(EventBridge)是一款安全,稳定,高效的云上事件连接器,作为流数据和事件的自动收集、处理、分发管道,通过可视化的配置,实现事件源(例如:Kafka,审计,数据库等)和目标对象(例如:CLS,SCF等)的快速连接,当前 EventBridge 已接入 100+ 云上服务,助力分布式事件驱动架构的快速构建。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档