【问题标题】:Android: with Greenrobot EventBus how to communicate between 2 Activity?Android:与Greenrobot EventBus 2 Activity之间如何通信?
【发布时间】:2016-02-09 14:47:37
【问题描述】:

我想在 2 个 Activity 之间进行通信。两者都是 register() 和 unregister() 方法:

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

当我点击我的列表(项目选择)时,ActivityB 就会启动。 ActivityB的目的是更新一些信息,并将这些新信息发送给ActivityA;所以在 ActivityB 我打电话:

EventBus.getDefault().post(new MyNewEvent(bla bla bla));

在我的 ActivityA 我有这个方法:

public void onEvent(MyNewEvent event) {
    ...
}

不幸的是,这个方法 onEvent 从未被调用过。为什么 ?因为在ActivityB启动时会调用ActivityA中的onStop()方法,所以就完成了向总线的注销...

那么在这种情况下,如何使用 EventBus 在这两个 Activity 之间进行通信?

谢谢你们!

【问题讨论】:

    标签: android android-activity greenrobot-eventbus


    【解决方案1】:

    您实际上可以通过使用粘性事件来做到这一点。

    http://greenrobot.org/eventbus/documentation/configuration/sticky-events/

    基本上,您在 Activity B 上使用 .postSticky() 发布一个粘性事件,当再次注册 Activity A 时,它会自动接收该粘性事件。

    但正如@jlhonora 的回答中所述,startActivityForResult 可能更适合您的需要。

    【讨论】:

      【解决方案2】:

      正如您已经知道的那样,您将无法使用 EventBus 在两个活动之间进行通信,因为您不能同时注册两个活动。

      startActivityForResult 模式更适合您想要实现的目标:http://developer.android.com/reference/android/app/Activity.html#StartingActivities

      【讨论】:

      • 感谢您的解释。所以事件总线并不是真正的 Android 组件之间通信的终极选择。
      • 视情况而定。当我有许多非关键事件或与后台/异步任务通信时,我非常喜欢它。但是在进行交互活动时,意图/结果是要走的路。
      • 如果我们不能使用EventBus在Activity之间进行通信,那么就编写一个简单的EventController来处理所有Activity、Fragment中的事件。根本不需要使用 EventBus。创建 EventController 类。使用 CopyOnWriteArrayList 存储 EventListener 引用。只需在所有活动中实现 EventListener 接口。 EventListener 接口将包含一个名为 handleEvent() 的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多