我尝试将ActivityTwo
的对象列表发送到MainActivity
我已关注EventBus的get started page并从onStart和onStop调用register()
和unregister()
方法,然后我使用EventBus.getDefault().post()
发送数据。
在MainActivity
上,除非我从unregister()
移除onStop()
来电,否则我什么都收不到。
我的问题是,我正确使用它吗?我应该在unregister()
中致电onDestroy()
吗?如果是这样的话,如果活动停止,他们为什么要从onStop
调用它呢
MainActivity
@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();
}
ActivityTwo
private void sendYoutubeData() {
if(youtubeData != null){
EventBus.getDefault().post(youtubeData);
finish();
}
}
答案 0 :(得分:2)
如果您希望在不可见的情况下收到MainActivity中的活动,是的,您应该将register()
和unregister()
分别放在onCreate()
和onDestroy()
中。
如果您的活动没有听众,则永远不会收到,除非是粘性事件,在这种情况下您可以在注册时收到。有关Sticky Events here
的更多信息答案 1 :(得分:2)
问题是您必须使用事件总线的发布行发布列表,然后您必须覆盖类中的onEvent()。 here是一个有用的链接。
您需要做的是定义其他事件,例如
public static class MessageEvent { /* Additional fields if needed */ }
现在从您获取数据的部分发布到活动中。
EventBus.getDefault().post(new MessageEvent());
在您的活动中,您会放置一个订阅者功能,该功能将在数据发布到事件总线时触发。 在那里你使用发布的数据
public void onMessageEvent(MessageEvent event) {/* Use the data*/};
答案 2 :(得分:2)
因为你参加了第二项活动,所以你不会得到任何活动,这意味着你的第一项活动是在#34;停止"州。根据您想要实现的目标,您可以尝试startActivityForResult
或创建粘性事件,但我不建议使用事件总线进行此类简单操作,因为它可能会导致难以调试的错误。< / p>
因此,我建议您使用选项1,使用startActivityForResult
。
答案 3 :(得分:-1)
如果您希望在活动没有焦点时接收活动上的活动,那么您可能做错了什么。我建议将订阅者的东西移动到一个静态单例类,并从该类启动带有Intent的Activity和一些必须管理某些情况的参数。