45

私は、square が Android コミュニティに行ったオープン ソースの貢献の大ファンであり、彼らの最新の貢献 Otto (イベント バス) を調べていました。

http://square.github.io/otto/

さらに掘り下げてみると、Otto はリフレクションを使用しており、順序付けされたブロードキャスト (消費されていないメッセージが、同じタイプのイベントをリッスンしているあるレシーバーから次のレシーバーに渡されるパターン) がないことがわかります。

AndroidLocalBroadcastManagerの v4 サポート ライブラリには (LBM) があり、これは同じ目的を果たしますが、よりかさばり、渡されるオブジェクトにより多くの制限があります。しかし、明るい面では、順序付けされたブロードキャストをサポートしており、通常のブロードキャストに似ています.

Otto と LBM はどちらも同じプロセス空間内にあるため、速度に関してはどちらも同じだと思います。私が見ることができる唯一の本当の違いは、Otto を使用するとカスタム イベントを定義でき、 Objects をシリアライズ/パーセルする必要がないことです。

したがって、私の本当の質問は、LBM が同じことを行う場合、いつ Otto を使用するかということです。

参考文献:

http://nick.perfectedz.com/otto-event-system/

インテントまたはイベント バスを使用して同じアプリ内で通信する

https://plus.google.com/107049228697365395345/posts/6j4ANWngCUY

4

3 に答える 3

38

しかし、明るい面では、順序付けられたブロードキャストをサポートしています

あまり。には がなくsendOrderedBroadcast()LocalBroadcastManagerのプライオリティは使用されてIntentFilterいないようです。「受信者を登録した順番で放送が配信される」というのであれば、それが現状なのかもしれませんが、このままでいいという保証はありません。

Otto と LBM はどちらも同じプロセス空間内にあるため、速度に関してはどちらも同じだと思います

おそらく同一ではありませんが、それらは似ています。

したがって、私の本当の質問は、LBMが同じことをする場合、いつOttoを使用するかということです

これら2つを比較すると、OttoにはよりクリーンなAPI、IMHOがあります。

個人的には、どちらよりも柔軟なスレッド モデルを提供するgreenrobot の EventBusを使用します。

于 2014-04-04T19:22:00.597 に答える
5

Otto と LBM はどちらも同じプロセス空間内にあるため、速度に関してはどちらも同じだと思います。

Otto イベントの登録にはかなりのコストがかかることがわかりました。イベント サブスクライバーの登録に 16 ミリ秒以上かかる場合があります (つまり、1 FPS が低下します!)。Otto でのイベント サブスクライブはリフレクションによって行われるため、これは多少予想されます。一方、LBM の場合、登録だけで数百 µs しかかからず、ほぼ 32 倍高速です。(トレースビューの結果、Samsung Galaxy S4)

しかし、もちろん、Otto を使用すると記述できるコードが少なくなり、トレードオフがあります。

于 2016-03-21T06:06:23.713 に答える
0
  1. otto はコードをより簡潔に、より小さくします
  2. otto はテストをより簡単にします
于 2016-06-06T12:34:26.337 に答える