2016-07-27 6 views
0

私はEventBus 3.0.0を使用し始めています。は保証Greenrobot EventBus粘着性のイベントのためですか?

私は活動へのサービスから送信される3つのスティッキーイベントを抱えている:

  1. 行動開始
  2. アクション進捗
  3. 私はイベントに聞いている

を終えアクションメインスレッド:

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN) 
public void on...Event(... event) { 
... 
} 

サービスは順番にイベントを送信:started-progressN-..-progressM-finishedと、サブスクライブ活動は、イベントに応じてUIを更新します。

活動を回転させた後、私はそれ以外の場合は(上が0にセットに進展を始めてから)UIを破るよう、それらが送信された順に粘着性のイベントを取得することを期待しています。イベントはEventBusが保証する順序です(私はすべてのこれらのイベントの同じEventBus、同じ受信スレッド、同じ加入者を使用していると仮定した場合)?

私のテストによるとは保証されていませんが、それは特長ですか?回転前

:回転(スティッキーイベントは再送)後

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% 

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 ... 
+1

あなたの 'status'イベントは' progress'イベントとは異なりますよね? –

+0

彼らは別のクラスです – 4ntoine

答えて

2

私はそれを試していないが、ドキュメントhereあなたは、すべてのonEventメソッドの優先順位を示すことができますと言います。

CompilationStart、CompilationProgress、CompilationFinishのような3つのイベントクラスがあるとすれば、それぞれ1,2,3の優先度を与えることができます。一方

@Subscribe(priority = 1); 
public void onEvent(CompilationStart event) { 
    ... 
} 
@Subscribe(priority = 2); 
public void onEvent(CompilationProgress event) { 
    ... 
} 
@Subscribe(priority = 3); 
public void onEvent(CompilationFinish event) { 
    ... 
} 

あなたはまさにこのようなCompilationInfoがこのようであるとして1つのクラスを使用する場合は、優先度の使用を避けることができます。とにかく、デフォルトの優先度は0であるので、他のイベントがこれらのもののすべての前に受信されることを覚えておいてください次の:CompilationStateは、親クラスがそのCompilationStart、CompilationProgressとCompilationFinish hineritsからである

public class CompilationInfo { 
    public CompilationState compilationState; 
    public int priority 

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

。それは、より読みやすいよう、あなたが優先フィールドの列挙型を使用している場合はそれも良いだろう。この方法では、onEventメソッドが1つだけ必要です。

+0

私が必要とするように思われる、チェックして確認する – 4ntoine

関連する問題