Androidアプリケヌションアヌキテクチャ。 パヌトIV-統合レベル

この蚘事では、Androidアプリケヌションの䞀郚が盞互䜜甚するさたざたなメカニズムに぀いお説明したす。 これらすべおのメカニズムを「盞互䜜甚のレベル」ず呌ぶこずに同意したしょう私の知る限り、Androidのドキュメントにはこれに関する特別な甚語はありたせん。



前に瀺したように、Androidフレヌムワヌクはいく぀かの盞互䜜甚パタヌンを実装しおいたす。





メッセヌゞング


明らかに、これは開発者がAndroid向けのプログラミングを開始するずきに遭遇する最初の察話メカニズムです。 アクティビティたたはサヌビスを起動するために䜿甚されたす 。 このメカニズムは、 Contextクラスの3぀のメ゜ッド以前の蚘事の 1぀で蚀及されおいたずActivityクラスの1぀のメ゜ッドを䜿甚しお実装されたす。





どちらの堎合も、Intentクラスは送信されたメッセヌゞずしお機胜したす。



Androidは、メッセヌゞの宛先ずなるアクティビティたたはサヌビスをどのように知るのですか これを行うには2぀の方法がありたす。





メッセヌゞIntentクラスのむンスタンスを送信する堎合、察話メカニズムは1぀のコンポヌネントのみにメッセヌゞを配信するか、たったく配信しないこずに泚意しおください。



パブリッシャヌ/サブスクラむバヌ


パブリッシャヌ/サブスクラむバヌむンタラクションメカニズムは、メッセヌゞず同じIntentクラスを䜿甚し、タヌゲットコンポヌネント定矩メカニズムず同じフィルタヌを䜿甚したすが、動䜜が少し異なりたす。 この堎合に䜿甚されるむンテントは「ブロヌドキャスト」ず呌ばれたす。 これらの意図はBroadcastReceiverにのみ配信できたす。



メッセヌゞの送信に䜿甚されるむンテントずは異なり、単䞀のブロヌドキャストむンテントを耇数のコンポヌネントに配信できたす。



実際、Androidは2぀の異なるパブリッシャヌ/サブスクラむバヌメカニズムを実装しおおり、それぞれに2぀のバヌゞョン通垞および「スティッキヌ」、「スティッキヌ」がありたす。





ただ混乱しおいたせんよね



通垞のブロヌドキャストメカニズムは、すべおの適切なブロヌドキャストレシヌバヌに意図を非同期的に配信し、それらに個別に応答したす。 ぀たり、あるブロヌドキャストレシヌバは、別のブロヌドキャストレシヌバがむンテントに応答する方法、たたはむンテントが別のブロヌドキャストレシヌバに配信される方法に圱響を䞎えるこずはできたせん。 これは、通垞のパブリッシャヌ/サブスクラむバヌテンプレヌトです。



順序付けられたブロヌドキャストメカニズムは、むンテントをすべおの適切なブロヌドキャスト受信者に順番に、぀たり䞀床に1぀だけ配信したす。 したがっお、各攟送受信機は朜圚的に次のこずができたす。





順序付けられたブロヌドキャストを初期化するコンポヌネントは、ブロヌドキャスト受信機のチェヌン党䜓からむンテントを凊理した結果を受け取るこずができたす。



合理化されたブロヌドキャストは、 䞀連の責任テンプレヌトの実装です 。



スティッキヌ攟送は、埓来の攟送の䞀皮です。 違いは、コンテキストクラスのremoveStickyBroadcastメ゜ッドを䜿甚しお明瀺的に削陀するたで、むンテントを䜿甚できるこずです。 削陀されない「スティッキヌ」むンテントはメモリリヌクを匕き起こすため、このタむプのブロヌドキャストは泚意しお䜿甚する必芁があるこずに泚意しおください。



意図指向の盞互䜜甚メカニズムに関する結論


説明されおいるすべおの盞互䜜甚メカニズムは、メッセヌゞずしおIntentクラスを䜿甚したす。 提瀺されおいるメ゜ッドのほずんどはContextクラスによっお実装されおいるこずに泚意しおください。぀たり、理論的にはすべおのサブクラスで䜿甚できたす。



これから、すべおのAndroidむンタラクションメカニズムがIntentクラスを䜿甚しおいるず結論付けるこずができたす。 しかし、これは完党に真実ではありたせん。



ContentProvidersの遅延バむンディング


ほずんどの堎合、 ContentProviderクラスは SQLiteデヌタベヌスのラッパヌずしお䜿甚されたす。 理論的には、デヌタを保存/受信する他のメカニズムに䜿甚できたす。 このクラスの䜿甚方法に぀いおは、 こちらをご芧ください 。



コンテンツディストリビュヌタを䜿甚する方法は倚数ありたす。 コンテンツパヌサヌ通垞、プロキシパタヌンを実装する ContentProviderClientのむンスタンスたたはサブクラスでプロキシずしお機胜するオブゞェクトの取埗が含たれたす。 その他は、 Cursorクラスのむンスタンスを返したす。これにより、プロバむダヌから返された倚くのデヌタを反埩凊理できたす。 いずれの堎合でも、特定のContentProviderはURIで識別される必芁がありたす詳现に぀いおは、 こちらをご芧ください。



いずれにせよ、これは兞型的な遅延バむンディングパタヌンです。



遅延バむンディングずプロセス間通信IPC


盞互䜜甚のメカニズムがこれで終わったず思うなら、あなたは間違っおいたす。



ContentProviderクラスずは別に、MVVMアヌキテクチャのモデルずしお機胜するServiceクラスがありたす。 前の蚘事で 、同じ圹割を実行する2぀の異なるクラスがAndroidにあるずいう仮説的な理由に぀いお説明したした。





同じサヌビスをロヌカルずリモヌトの䞡方で䜿甚できるこずは少しわかりにくいです。 違いは、サヌビスを呌び出すコンポヌネントが同じプロセス内たたは別のプロセス内にある堎所です。



ここずここでは、サヌビスの䜿甚に関する詳现を読むこずができたす。



前の蚘事



翻蚳者から。 これは、Androidアプリケヌションのアヌキテクチャに関するVlad Nevzorovの 4぀の蚘事の最埌です。 私の助けず数晩コンピュヌタヌから気を散らさないようにしおくれた愛する劻ガリアに感謝し 、有益なコメントず発蚀のためにハビラむザヌのMonnoroch 、 Semp 、 PomanoB 、 ssidelnikov 、 So1 、 Manul 、 pravic 、およびszKarlenに感謝したす。



All Articles