java - EventBus困惑

标签 java android greenrobot-eventbus

我正在尝试将对象列表从 ActivityTwo 发送到 MainActivity

我关注了EventBus的get started page并从 onStart 和 onStop 调用 register()unregister() 方法,然后我使用 EventBus.getDefault().post() 发送数据。

MainActivity上,除非我从onStop()中删除unregister()调用,否则我什么也得不到。

我的问题是,我使用得正确吗?我应该在 onDestroy() 中调用 unregister() 吗?如果是这样,如果 Activity 停止后它不会拾取任何内容,为什么他们要从 onStop 调用它

主要 Activity

@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();
}

Activity 二

private void sendYoutubeData() {
        if(youtubeData != null){

          EventBus.getDefault().post(youtubeData);
          finish();
      }

 }

最佳答案

如果您想在 MainActivity 不可见时接收该事件,是的,您应该将 register()unregister() 分别放在 onCreate 中()onDestroy()

如果您的事件没有监听器,则永远不会收到该事件,除非它是粘性事件,在这种情况下您将能够在注册时收到它。有关粘性事件的更多信息 here

关于java - EventBus困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42722533/

相关文章:

java - 我可以控制 Java 监听器的刷新率吗?

java - Android RecyclerView 项目点击不起作用 - MVVM

android - 为什么 Picasso 不使用 imageView.getContext()?

Android 位置 "going for a walk"本身

java - GreenRobot的eventbus看不到注解, "no public methods"

android - Eventbus - 如何注销 POJO?

java - Liferay IDE portlet 更改未在服务器上同步

java - 序列化时间戳转换为秒

android - ActionBar 和 ListView 行之间的空间

android - 如何使用greenrobot将数据传递给还没有初始化的activity或fragment?