如何使用greenrobot eventbus进行网络通信?
How to use network communication using greenrobot eventbus?
所以,我想使用 GreenRobots 网站上提到的以下功能,
EventBus can handle threading for you: events can be posted in threads different from the posting thread. A common use case is dealing with UI changes. In Android, UI changes must be done in the UI (main) thread. On the other hand, networking, or any time consuming task, must not run on the main thread.
我想做的是,在我的 android 应用程序中,我想创建一个事件来处理我所有的网络任务(从服务器发送和接收数据)。
我该怎么做?
我是否应该在事件 POJO 中进行网络调用,然后使用 OnEvent 执行 post 网络调用任务。(我认为这是不正确的还是正确的?)
编辑:使用事件总线进行线程处理可能不是最佳选择,因为您的所有 OnEvent 调用将一个接一个地同步 运行,这可能会导致总线阻塞,而且它不适合用于那。但是下面的答案是可以完成的方式,如果这是一个要求的话。
我建议使用可能不需要事件总线的架构。事件总线仍然有用,我认为您可以在他们的 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 {
}
}
所以,我想使用 GreenRobots 网站上提到的以下功能,
EventBus can handle threading for you: events can be posted in threads different from the posting thread. A common use case is dealing with UI changes. In Android, UI changes must be done in the UI (main) thread. On the other hand, networking, or any time consuming task, must not run on the main thread.
我想做的是,在我的 android 应用程序中,我想创建一个事件来处理我所有的网络任务(从服务器发送和接收数据)。
我该怎么做?
我是否应该在事件 POJO 中进行网络调用,然后使用 OnEvent 执行 post 网络调用任务。(我认为这是不正确的还是正确的?)
编辑:使用事件总线进行线程处理可能不是最佳选择,因为您的所有 OnEvent 调用将一个接一个地同步 运行,这可能会导致总线阻塞,而且它不适合用于那。但是下面的答案是可以完成的方式,如果这是一个要求的话。
我建议使用可能不需要事件总线的架构。事件总线仍然有用,我认为您可以在他们的 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 {
}
}