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

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

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

1
EventBus.getInstance().post(new Test("eventbus发送消息成功!"));
1
2
3
4
5
6
7
8
9
10
11
@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注册之前,消息已经发送,因此才会出现上面的错误。

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

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

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

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

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

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :