【问题标题】:How to use network communication using greenrobot eventbus?如何使用 greenrobot eventbus 进行网络通信?
【发布时间】:2017-02-22 11:33:55
【问题描述】:

所以,我想使用 GreenRobots 网站上提到的以下功能,

EventBus 可以为您处理线程:事件可以在不同于发布线程的线程中发布。一个常见的用例是处理 UI 更改。在 Android 中,UI 更改必须在 UI(主)线程中完成。另一方面,网络或任何耗时的任务都不能在主线程上运行。

我想做的是,在我的 android 应用程序中,我想创建一个事件来处理我的所有网络任务(从服务器发送和接收数据)。

我该怎么做?

我是否应该在事件 POJO 中进行网络调用,然后使用 OnEvent 执行网络调用后任务。(我认为这不正确吗?)

编辑:使用事件总线进行线程处理可能不是最好的选择,因为您的所有 OnEvent 调用将一个接一个地同步运行,这可能会导致总线阻塞,而且它也不是为此而生的。但是下面的答案是如果有要求的话可以做到的方式。

【问题讨论】:

    标签: android event-bus greenrobot-eventbus greenrobot-eventbus-3.0


    【解决方案1】:

    我建议使用可能不需要事件总线的架构。事件总线仍然很有用,我想您可以在他们的getting started guide 中找到您要查找的内容。

    一些示例代码:

    public class EventBusExample extends Activity {
    
      @Override protected void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
        EventBus.getDefault().post(new BackgroundWorkEvent());
      }
    
      @Override protected void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
      }
    
      @Subscribe(threadMode = ThreadMode.ASYNC)
      public void doBackgroundWork(BackgroundWorkEvent event) {
        // do background work here
        // when finished, post to ui thread
        EventBus.getDefault().post(new UiWorkEvent());
      }
    
      @Subscribe(threadMode = ThreadMode.MAIN)
      public void doUiWork(UiWorkEvent event) {
        // on main thread. do ui stuff
      }
    
      public static class BackgroundWorkEvent {
    
      }
    
      public static class UiWorkEvent {
    
      }
    
    }
    

    【讨论】:

    • 所以你基本上是在嵌套事件,对吧?还有一个问题,让发送者和接收者在同一个活动中是正确的实现吗?
    • 示例代码不是最佳实践。我不使用事件总线进行线程处理。这只是一个简单的例子来说明如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多