首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绿色机器人EventBus粘性事件订单有保证吗?

绿色机器人EventBus粘性事件订单有保证吗?
EN

Stack Overflow用户
提问于 2016-07-27 06:30:55
回答 1查看 1.2K关注 0票数 0

我开始使用EventBus 3.0.0。

我有三个棘手的事件要从服务发送到活动:

  1. 行动开始
  2. 行动进展
  3. 动作完成

我正在听主线上的事件:

代码语言:javascript
复制
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void on...Event(... event) {
...
}

服务按照顺序发送事件:started-progressN-..-progressM-finished和订阅的活动根据事件更新UI。

在活动旋转之后,我希望按照发送它们的顺序获得粘性事件,否则会破坏ui (因为启动时将进度设置为0)。事件顺序是否由EventBus保证(假设我对所有这些事件使用相同的EventBus、相同的接收线程、相同的订阅服务器)?

根据我的测试,没有保证它是,这是特性/问题,对吗?

轮调前:

代码语言:javascript
复制
07-27 11:27:55.254  27910-27910/ app D/App﹕ status Compilation started ...
07-27 11:27:55.254  27910-27910/ app D/App﹕ compile progress 0%
07-27 11:27:55.354  27910-27910/ app D/App﹕ compile progress 20%
07-27 11:27:55.354  27910-27910/ app D/App﹕ compile progress 30%
07-27 11:27:55.354  27910-27910/ app D/App﹕ compile progress 40%
07-27 11:27:55.844  27910-27910/ app D/App﹕ compile progress 50%

旋转后(令人讨厌的粘性事件):

代码语言:javascript
复制
07-27 11:27:59.554  27910-27910/ app D/App﹕ compile progress 50%
07-27 11:27:59.554  27910-27910/ app D/App﹕ status Compilation started ...
EN

回答 1

Stack Overflow用户

发布于 2017-02-17 10:12:04

我还没有试过,但是文档这里说您可以为每个onEvent方法指定一个优先级。

如果您有3个事件类,如CompilationStart、CompilationProgress和CompilationFinish,那么您可以提供3、2和1的优先级,如下所示。无论如何,请记住默认优先级为0,因此任何其他事件都将在所有这些事件之前接收到:

代码语言:javascript
复制
@Subscribe(priority = 3);
public void onEvent(CompilationStart event) {
    ...
}
@Subscribe(priority = 2);
public void onEvent(CompilationProgress event) {
    ...
}
@Subscribe(priority = 1);
public void onEvent(CompilationFinish event) {
    ...
}

另一方面,如果只使用一个类(如CompilationInfo ),则可以避免使用优先级,如下所示:

代码语言:javascript
复制
public class CompilationInfo {
    public CompilationState compilationState;
    public int priority

    public CompilationInfo(CompilationState compilationState, int priority) {
        this.compilationState = compilationState;
        this.priority = priority;
    }
}

其中CompilationState是CompilationStart、CompilationProgress和CompilationFinish阻止的父类。如果您使用枚举作为优先级字段,这样会更好,因为它更具可读性。这样,您只需要一个onEvent方法。

编辑:根据文档更改更改优先级值

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38605322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档