EventBus 3.0 在页面间跳转接收不到消息解决方法

使用EventBus代替广播,intent传递消息等,大大减少了代码量,提升编码速度,同时整体的代码优雅型也得到提高。

使用过程中遇到一些小问题,在当前Activity中使用:

EventBus.getInstance().post(new Test("eventbus发送消息成功!"));

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    EventBus.getIntsance().register(this);
    ...
}

@Subscribs(threadMode = ThreadMode.MAIN)
public void onMain(Test test){
    Log.i("test", test);
}

在控制台打印出来的信息是"eventbus发送消息成功!"。

如果在另外一个Activity,SecondActivity跳转的时候使用EventBus就会接受不到报错No subscribers registered for event class,原因就是跳转SecondActivity发生在EventBus注册之前,消息已经发送,因此才会出现上面的错误。

解决方案:使用粘性发送消息的方式

EventBus.getInstance().postSticky(new Test("发送成功"));

当然在接收的时候指定方式sticky = true即可,如

@Subscribs(threadMode = ThreadMode.MAIN, sticky = true)
public void onMain(Test test){
    Log.i("test", test);
}

粘性发送消息的意思是如果没有接收到消息还会继续发送最新发送过的消息。

上一篇 EventBus 3.0 封装
下一篇 Android之allowBackup属性
目录
文章列表
1 编译并启动elastic-job-lite最新版
编译并启动elastic-job-lite最新版
2
BigDecimal精度scale设定
BigDecimal精度scale设定
3
Android增量更新 - Apk差分合并算法服务端设计
Android增量更新 - Apk差分合并算法服务端设计
4
MySQL实现主从复制功能
MySQL实现主从复制功能
5
让新版Appium支持ByName定位
让新版Appium支持ByName定位
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。