IntentService が自動的に停止するのに、通常の Service では停止するために stopService() 呼び出しが必要なのはなぜですか? これは内部でどのように機能しますか?
2 に答える
IntentService は、キューに処理する作業 (インテント) がなくなると、stopSelf() を呼び出します。androidxref.com などのサイトで IntentService.java ソースを確認してください。
http://androidxref.com/4.2.2_r1/xref/frameworks/base/core/java/android/app/IntentService.java
より正確には (提供されたリンクの 66 行目を確認してください):実際にはキューをテストしませんが、毎回 stopSelf(int) を呼び出します。パラメータとして startid(int) を受け取る stopSelf() バージョンは、実際には、まだ処理する必要があるサービスによって受信された新しい開始コマンドがないかどうかを確認します。IntentService にはインテントを順次処理するワーカー スレッドが 1 つしかないため、このテストは「キューが空」かどうかのテストと同じです。
サービスは、ユーザーとの直接の対話なしに、バックグラウンドで実行されるコンポーネントです。Android プラットフォームは、事前定義されたシステム サービスを提供して実行し、適切な権限が与えられれば、すべての Android アプリケーションがそれらを使用できます。次の方法で停止できます。
Boolean stop1month = context.stopService(new Intent(context,Service.class));
or
stopSelf()
詳細については、サービス クラスを参照してください。