Android EventBus使用上の注意事項


EventBusを使用する過程で、ページに金額10元を入力し、支払いを待っている間にキャンセルをクリックし、ページに戻って再び金額20元を入力し、支払いパスワードを入力して取引に成功し、成功した結果に見た取引金額は意外にも10元だった.静的変数、システムキャッシュを排除する以外に、問題の焦点をEventBusに徐々に向けて、1回の調査を経て、やっと問題の所在をロックしました.キャンセル論理分岐でEventBusを解約していなかったのか、本当にいい加減だった!
EventBusは簡単で使いやすいですが、使用中に注意すべき点もあります.各方面の経験を総合して、注意事項は以下のようにまとめられています.
1、登録は一般的にonCreateまたはonStartに書かれており、できるだけonResumeに書かないでください.複数回登録する可能性があります.例えば、EventBusException:Subscriber class already registered to event class 2、登録をキャンセルすると必ずonDestoryに書かれ、onStopに書くと異常を引き起こす可能性があります.3、登録を提案する前に、登録したかどうかを判断し、重複登録を避け、各変数の初期化の最後に、空のポインタの異常を起こさないようにする.
if (!EventBus.getDefault().isRegistered(this)) {
    EventBus.getDefault().register(this);
}

4、3.0と以前のバージョンは互換性がありません.現在、イベントを受信するために注釈の方法が採用されています.4つの注釈方式はそれぞれ次のとおりです.
1)@Subscrible対応前のonEvent();
2)@Subscrible(threadMode=ThreadMode.ASYNC)は、以前のonEventAsync()に対応しています.
3)@Subscrible(threadMode=ThreadMode.BACKGRAND)は、前のonEventBackground()に対応する.
4)@Subscrible(threadMode=ThreadMode.MAIN)は、前のonEventMainThread()に対応する.
5、注釈を用いる方法名は制限されず、パラメータは1つのみであり、送信者postのパラメータと対応するペアであり、threadModeが宣言されていない場合のデフォルトスレッドモードはThreadModeである.POSTINGは、このモードでのみスレッドをキャンセルすることができ、そうでないと、org.greenrobot.eventbus.EventBusException: This method may only be called from inside event handling methods on the posting thread
6、1つのイベントは重複登録をサポートしていません.そうしないと、例外が報告されます.
7、register後、ページが終了する可能性があることを確認し、直ちにunregisterを確認することを忘れないでください.