Android実用オープンソースライブラリ-EventBus

3418 ワード

新しいスキルget
このようなことは、会社のプロジェクトはまだ0から1の過程にあり、1つのログインモジュールであり、ユーザーがログインし終わったら各種データをリフレッシュし、各種コールバックを完了しなければならない.将来のメンテナンスのために、穴を掘らないように、最初は観察者を使う準備をしておくと、優雅になります.しかし、JAVAのObserverは使い勝手が悪く、仕方なく時間が迫っていて、徹夜の準備ができています.隣の仲間はEventBusを使って、使い方をざっと調べて、ひょうたんでひょうたんを描いて、もともと大きな仕事量だったのに、秒でできたなんて、EventBusは本当に神器で、新しいスキル+1.
EventBusの概要
EventBusは「イベントカー」と訳すと思っていたが、ここでbusがバスの意味であることを調べた.EventBusはJVM内部に基づくデータ伝送システムであり、そのコアオブジェクトはEventとEventHandlerである.個人的にはEventBusはandroidのBroadCastに似ているような気がしますが、使いやすいです.例えば、A、Bの2つのActivityまたはFragmentは、Aで1つのことが起こったと同時にBに相応の変更を通知し、A、Bに呼び出し関係がある場合はintent、handler、またはインタフェースコールバックなどで解決することもできる.A、Bの8つの竿が打てない場合は、BroadCastでメッセージを伝えることもできます.しかしBroadCastという案は重すぎて、今は比較的軽量級の解決策があります:EventBus、ほとんどいろいろなタイプのイベントの伝達を完成することができて、できないことはなくて、意外です.EventBusはAndroid最適化のためのパブリケーション/サブスクリプションインベントリーバスです.主な機能はIntent,Handler,BroadCastの代わりにFragment,Activity,Service,スレッド間でメッセージを伝達することである.利点は、コストが小さく、コードが優雅であることです.送信者と受信者をデカップリングする.
使用方法
前述したように、EventBusはパブリッシュ/サブスクリプションというモデルに基づいて設計されており、一般的な点は設計モードの観察者モードである.使用も簡単で、イベント全体:被観察者がメッセージを発行し、観察者がメッセージを購読し、メッセージを受信した後にdo somethingします.
≪イベント|Events|ldap≫
まず,被観察者と観察者との間に統一されたイベントを約束し,信号として理解できる.ここにはクラスが必要です.空のクラスでもいいです.
public class Event {  
     public Event(){}  
 } 

これでいいです.
オブザーバーによるイベントのパブリッシュ
EventBus.getDefault().post(newEvent());

これだけでいいです.ここは単一の例です.EventBus.getDefault()はソースコードに相当するgetInstance()
オブザーバがイベントをリスニングする
1:オブジェクトページでイベントを受信する
publicvoidonEvent(Eventevent){}

この方法では呼び出しを書く必要はありません.安心して、イベントを受信した後、やりたいことを大胆に書きます.
2:oncreat()または他の適切な場所でリスニングイベントを登録する
EventBus.getDefault().register(this);

このregister(this)は何をしているのでしょうか.実はregister(this)は現在のクラスに行って、すべての方法を巡り、onEventの先頭を見つけて保存します.今、onEventの冒頭の方法が何なのか知っていますよね.3:登録解除、ondestroy()またはその他の適切な場所で登録解除
EventBus.getDefault().unregister(this);

以上がすべての使い方ですが、簡単なのか、はっきりしているのか、はっきりしているのか、素晴らしいのか.
高度な使用方法
onEvent()がイベントを受信する方法については、プライマリスレッドで受信したイベントですか、サブスレッドで受信したイベントですか、またはどのサブスレッドで受信したイベントですか.EventBusは、4種類のイベントを受信する方法を提供し、あなたの個人的なニーズを満たすことができます.onEvent():onEventをサブスクリプション関数として使用すると、イベントがどのスレッドでパブリッシュされるか、onEventはこのスレッドで実行されます.つまり、パブリッシュイベントと受信イベントスレッドは同じスレッドで実行されます.このメソッドを使用すると、onEventメソッドでは時間のかかる操作を実行できず、時間のかかる操作を実行するとイベント配信が遅延しやすくなります.onEventMainThread():onEventMainThreadをサブスクリプション関数として使用すると、イベントがどのスレッドでパブリッシュされているかにかかわらず、onEventMainThreadはUIスレッドで実行され、受信イベントはUIスレッドで実行されます.これはAndroidではUIスレッドと新しいUIしか使用できないため、Androidでは非常に役立ちます.従ってonEventMainThreadメソッドでは時間のかかる操作は実行できない.onEventBackground():onEventBackgrondをサブスクリプション関数として使用すると、イベントがUIスレッドでパブリッシュされた場合、onEventBackgroundはサブスレッドで実行され、イベントがサブスレッドでパブリッシュされた場合、onEventBackground関数はそのサブスレッドで直接実行されます.onEventAsync():この関数をサブスクリプション関数として使用すると、イベントがどのスレッドでパブリッシュされても、onEventAsyncを実行する新しいサブスレッドが作成されます.
その他
もし私のプロジェクトでEventBusで多くのイベントを発表し、同時に多くの場所でこれらのイベントをそれぞれ受信しなければならない場合、送信されたメッセージと受信されたメッセージはどのように対応しているのか、受信が間違っているのではないかという疑問があります.前述したように,被観察者と観察者はあらかじめ約束された信号で互いを見つけ,EventBusがどの関数を調整するかをどの関数が伝達するパラメータがこのクラスの例であり,どれがどの関数を調整するかをどの関数が知っているかを見る.もし2つあったらそうですね.2つとも呼び出されます.私の上の例ではイベントは空のクラスですが、実際に使用する過程で様々なタイプのパラメータを加えてデータの伝達を実現することができますが、クールではありませんか.
まとめ
Androidでは通信のソリューションが多く、具体的なソリューションは実際の状況に応じて作成されます.新開発者にとってはHandler,startActivity forResult,onNewIntent,Broadcast,CallbackのシナリオでAndroid開発の魅力を体験したほうがいい.EventBusは切り札として、他のシナリオが解決しにくいときは、遅くない.