これらは 2 つのアクティビティであるため、まだ作成されていない、または失速モード ( )ActivitySubscriber
のときにイベントを投稿します。スティッキー イベントを使用する必要があります。ActivityReceiver
onStop()
ActivitySubscriber.postSticky(...)
また、ActivityReceiver には次の 2 つのオプションがあります。
EventBus.getDefault().register(this)
そしてその後のどこかEventBus.getDefault().getStickyEvent()
EventBus.getDefault().registerSticky()
そして通常の使用EventBus.getDefault().onEvent(...)
更新:
EventBus 3.0 では、サブスクライブの方法が変更されました。
特定の接尾辞ではなく注釈で終わるメソッド名は必要ありません。
バージョン 3 の使用方法:
//// in your build.gradle
compile 'de.greenrobot:eventbus:3.0.0-beta1'
// alternatively you can target latest whatever currently
// compile 'de.greenrobot:eventbus:+'
//// from a class which needs to dispatch an event
// posting an event is as before, no changes
// here we dispatch a sticky event
EventBus.getDefault().postSticky(myStickyEvent);
//// from your class which needs to listen
// method name can be any name
// any of subscribe params is optional, i.e. can use just @Subscribe
@Subscribe(threadMode = ThreadMode.MainThread, sticky = true, priority = 1)
public void onEventBusEvent(@Nullable final StickyEvent stickyEvent) {
if (stickyEvent != null) {
...
// optionally you can clean your sticky event in different ways
EventBus.getDefault().removeAllStickyEvents();
// EventBus.getDefault().removeStickyEvent(stickyEvent);
// EventBus.getDefault().removeStickyEvent(StickyEvent.class);
}
}
バージョン 3 の詳細と比較:
ソースから抽出されたいくつかの詳細:
ThreadMode.PostThread
サブスクライバーは、イベントを投稿している同じスレッドで呼び出されます。これがデフォルトです。イベント配信は、スレッドの切り替えを完全に回避するため、オーバーヘッドが最小であることを意味します。したがって、これは、メイン スレッドを必要とせずに非常に短時間で完了することがわかっている単純なタスクに推奨されるモードです。このモードを使用するイベント ハンドラーは、ポスト スレッド (メイン スレッドである可能性がある) をブロックしないように、すばやく戻る必要があります。
ThreadMode.MainThread
サブスクライバーは、Android のメイン スレッド (UI スレッドと呼ばれることもあります) で呼び出されます。投稿スレッドがメイン スレッドの場合、イベント ハンドラ メソッドが直接呼び出されます。このモードを使用するイベント ハンドラーは、メイン スレッドのブロックを回避するために、すばやく戻る必要があります。
ThreadMode.BackgroundThread
サブスクライバーはバックグラウンド スレッドで呼び出されます。投稿スレッドがメイン スレッドでない場合、イベント ハンドラー メソッドは投稿スレッドで直接呼び出されます。ポスティング スレッドがメイン スレッドの場合、EventBus は単一のバックグラウンド スレッドを使用し、すべてのイベントを順番に配信します。このモードを使用するイベント ハンドラーは、バックグラウンド スレッドのブロックを回避するために、迅速に戻ることを試みる必要があります。
ThreadMode.Async
イベント ハンドラー メソッドは別のスレッドで呼び出されます。これは、投稿スレッドとメイン スレッドから常に独立しています。このモードを使用すると、ポスト イベントはイベント ハンドラー メソッドを待機しません。イベント ハンドラー メソッドは、ネットワーク アクセスなどの実行に時間がかかる場合に、このモードを使用する必要があります。同時実行スレッドの数を制限するために、多数の実行時間の長い非同期ハンドラー メソッドを同時にトリガーすることは避けてください。EventBus はスレッド プールを使用して、完了した非同期イベント ハンドラー通知からのスレッドを効率的に再利用します。
- のデフォルト値
@Subscribe
threadMode = ThreadMode.PostThread
sticky = false
- true の場合、最新のスティッキー イベントを配信しde.greenrobot.event.EventBus.postSticky(Object)
ます (このサブスクライバーに投稿されます (イベントが利用可能な場合)
priority = 0
- イベント配信の順序に影響を与えるサブスクライバーの優先順位。同じ配信スレッド内で、優先度の高いサブスクライバーは、優先度の低いサブスクライバーより先にイベントを受け取ります。デフォルトの優先度は 0 です。注: 優先度は、異なるスレッド モードのサブスクライバー間の配信の順序には影響しません。
編集 2
lib の作成者からの Greenrobot EventBus に関する質問専用のサイトがあります。
http://greenrobot.org/eventbus/