android - 我可以在 Activity 通信中使用 EventBus 吗?

标签 android greenrobot-eventbus

共有三个 Activity ABC

  1. 在 Activity A onCreate() 中注册 EventBus,在 onDestroy() 中注销,还有一个方法 onEvent (TestEvent e);

  2. Activity A 启动 Activity B

  3. Activity B 启动 Activity C

  4. 在 Activity C 中:

    EventBus.getDefault().post(new TestEvent("close A"));
    

我是这样使用EventBus的,效果很好。我的代码有什么问题吗?

最佳答案

没关系。 EventBus 是线程安全的,并且有很多方法可以使其更易于使用,例如 onEventMainThread、onEventBackgroundThread、onEventAsync。

您的代码的问题是:您的 Activity 将继续获取事件,即使它在后台也是如此。没关系(在这种特殊情况下)。但是,如果您将来必须实现其他功能,请记住这一点:

  • onCreate 注册 -> onDestroy 注销
  • onStart 注册 -> onStop 注销
  • onResume 注册 -> onPause 取消注册

还有一点:您必须绝对确保您的 Activity 仅注册一次。因为,如果您多次注册,您将收到与注册次数一样多的事件。因此,请像这样修改您的寄存器:

if (!EventBus.getDefault().isRegistered(this)) {
    EventBus.getDefault().register(this);
}

如果您需要更多详细信息,请阅读有关 EventBus 的更多信息 here .

但是,如果您遵循这些简单的规则,您的 Activity 的生命周期。我经常使用它,但没有遇到任何问题。

关于android - 我可以在 Activity 通信中使用 EventBus 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31510573/

相关文章:

android - Android 中的 IPC 使用 GreenRobot 事件总线

android - 具有线程安全性的事件总线的最佳实践

android - Fragment 在 resume 后不响应 UI 更新和 eventbus 事件

java - 在 Android 5 最近屏幕中更改 Activity 的标题/标签

Android 依赖项 'android.arch.lifecycle:runtime' 的编译 (1.0.0) 和运行时 (1.1.1) 类路径有不同的版本

android - 有没有办法在android中显示一个全局对话框?

android - 如何使用ffmpeg进行多线程?

java - Triangle_Strip 应该包裹吗?

Android GreenRobot 的 EventBus 'register' 方法使我的应用程序崩溃

android - Activity在后台时如何接收eventbus事件