1

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

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

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

我该怎么做?

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

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

4

1 回答 1

0

我建议使用可能不需要事件总线的架构。事件总线仍然很有用,我认为您可以在他们的入门指南中找到所需的内容。

一些示例代码:

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 {

  }

}
于 2017-02-22T11:47:20.583 回答