【IntentService原則の概要】

インテントサービス

一文の要約: IntentService の本質は次のとおりです: Service + HandlerThread

導入

IntentService は Service を継承し、非同期リクエストを処理するクラスです IntentService には時間のかかる操作を処理するワーカースレッドが存在します IntentService の起動方法は従来の Service と同様です実行すると、IntentService が自動的に停止するため、手動で制御する必要はありません。さらに、IntentService は複数回起動でき、時間のかかる操作はそれぞれ、IntentService の onHandleIntent コールバック メソッドでワーク キューの形式で実行され、毎回 1 つのワーカー スレッドのみが実行され、2 番目のワーカー スレッドは実行されます。最初のものが実行された後に実行される、など。

さらに、アプリケーションのメイン スレッド (UI スレッド) をブロックすることなく、すべてのリクエストは単一のスレッド内にあり、同時に処理されるリクエストは 1 つだけです。

では、IntentService を使用する利点は何でしょうか?

第一に、サービス内のスレッドを手動で開く手間が省けます。第二に、操作の完了時にサービスを手動で停止する必要がありません。

これは、ビジネス プロセスの処理を容易にするクラスである IntentService です。これは Service ですが、Service よりも賢明です。

IntentService が時間のかかるタスクを処理できるのはなぜですか?

IntentServiceはServiceを直接継承しているため、ソースコードから解析する必要があり、Serviceを継承した後のコードは合計100行以上になります。
onCreate() 内で、HandlerThread の新しいインスタンスが作成されます。
(HandlerThread は Thread のサブクラスです。HandlerThread 内には UI スレッド用の小さな行があり、内部の Looper ループはメッセージをポーリングしてメッセージ処理メッセージを取得し続けます。)

そして、IntentService には、内部に Handler サブクラス ServiceHandler があり、その Looper はこの HandlerThread の Looper を使用し、IntentSerivce は onStart() で Message を送信し、ServiceHandler は Message を処理するときに onHandleIntent を呼び出します。それで

簡単に言えば、IntentService は内部でスレッドを作成し、Android が提供する Handler Message Looper を通じて、これらのメッセージ処理クラスがメッセージ処理モデルを構成します。そのため、IntentService の onHandleIntent メソッドは、実際には IntentService 内に作成された子スレッドで処理されます。

おすすめ

転載: blog.csdn.net/UserFrank/article/details/129204033