EventBus混乱

时间:2017-03-10 15:54:52

标签: java android greenrobot-eventbus

我尝试将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();
      }

 }

4 个答案:

答案 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;停止&#34;州。根据您想要实现的目标,您可以尝试startActivityForResult或创建粘性事件,但我不建议使用事件总线进行此类简单操作,因为它可能会导致难以调试的错误。< / p>

因此,我建议您使用选项1,使用startActivityForResult

答案 3 :(得分:-1)

如果您希望在活动没有焦点时接收活动上的活动,那么您可能做错了什么。我建议将订阅者的东西移动到一个静态单例类,并从该类启动带有Intent的Activity和一些必须管理某些情况的参数。