如何使用greenrobot eventbus进行网络通信?

时间:2017-02-22 11:33:55

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

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

  

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

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

我如何做到这一点?

我应该在事件POJO中进行网络呼叫,然后使用OnEvent来发布网络呼叫任务。(我不认为这是正确的还是它?)

编辑:使用事件总线进行线程化可能不是最佳选择,因为所有OnEvent调用将一个接一个地同步运行,这可能会导致阻塞总线,也不会意味着阻塞总线。但下面的答案是,如果满足要求,可以采取的方式。

1 个答案:

答案 0 :(得分:0)

我建议使用可能不需要事件总线的架构。事件总线仍然有用,我认为您可以在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 {

  }

}