Java 事件总线混乱
我正在尝试将对象列表从Java 事件总线混乱,java,android,greenrobot-eventbus,Java,Android,Greenrobot Eventbus,我正在尝试将对象列表从ActivityTwo发送到MainActivity 我遵循了EventBus,从onStart和onStop调用了register()和unregister()方法,然后使用EventBus.getDefault().post()发送数据 在MainActivity上,除非从onStop()中删除unregister()调用,否则我不会得到任何东西 我的问题是,我是否正确使用了它?我应该在ondestory()中调用unregister()?如果是这样的话,如果活动停止时
ActivityTwo
发送到MainActivity
我遵循了EventBus,从onStart和onStop调用了register()
和unregister()
方法,然后使用EventBus.getDefault().post()
发送数据
在MainActivity
上,除非从onStop()
中删除unregister()
调用,否则我不会得到任何东西
我的问题是,我是否正确使用了它?我应该在ondestory()
中调用unregister()
?如果是这样的话,如果活动停止时它不会接收任何信息,为什么他们要从onStop
调用它
main活动
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(YoutubeData event) {
System.out.print(event);
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
活动二
private void sendYoutubeData() {
if(youtubeData != null){
EventBus.getDefault().post(youtubeData);
finish();
}
}
如果要在MainActivity中接收不可见的事件,则可以将
register()
和unregister()
分别放在onCreate()
和onestroy()
中
如果您的事件没有侦听器,它将永远不会被接收,除非它是一个粘性事件,在这种情况下,您可以在注册时接收它。有关粘性事件的更多信息问题在于,必须使用事件总线的post行发布列表,然后必须在类中重写OneEvent()。 是一个有帮助的链接 您需要做的是定义其他事件,如
public static class MessageEvent { /* Additional fields if needed */ }
现在,从获取数据的部分开始,将其发布到事件中
EventBus.getDefault().post(new MessageEvent());
在活动内部放置一个订户函数,当数据发布到事件总线时将触发该函数。
在那里你可以使用发布的数据
public void onMessageEvent(MessageEvent event) {/* Use the data*/};
您将不会获得任何事件,因为您处于活动2中,这意味着您的第一个活动处于“已停止”状态。根据您想要实现的目标,您可以尝试
startActivityForResult
或创建一个粘性事件,但我不建议使用事件总线进行此类简单操作,因为它可能会导致难以调试的严重错误
因此,我建议您选择选项1,使用
startActivityForResult
如果您想在活动没有焦点的情况下接收活动事件,那么您可能做错了什么。我建议将subscriber内容移动到一个静态的singleton类,然后从该类开始活动,在您必须管理某些情况时,要有目的和一些参数。这回答了问题,但不是这些简单任务的最佳用例。