IntentServices はバックグラウンドで実行され、通常の Service はメイン スレッドで実行されることを理解しています。
オブジェクトはスレッド上で実行されません。メソッドはそうします。
IntentService
から継承しService
ます。の主なライフサイクル メソッドはService
、特にonStartCommand()
メイン アプリケーション スレッドで呼び出されます。の呼び出しによってトリガーされるメソッドIntentService
を呼び出すために使用するバックグラウンド スレッドを提供します。onHandleIntent()
onStartCommand()
データを更新するだけの UI のないものを、なぜメイン スレッドで実行する必要があるのでしょうか。
あなたはそうしない。
以下の Google が提供する SyncService の例では、IntentService ではなく Service を使用するのはなぜですか?
ここではanIntentService
が不適切だからです。リンク先のドキュメントを引用します。
これを行うには、特別な Android バインダー オブジェクトを同期アダプター コンポーネントからフレームワークに渡すバインドされたサービスを作成する必要があります。このバインダー オブジェクトを使用すると、フレームワークは onPerformSync() メソッドを呼び出してデータを渡すことができます。
IntentService
と結合パターンはうまく連携しません。
スレッド化の観点からは、Android によって提供されるonPerformSync()
バックグラウンド スレッド で呼び出されます。したがって、IntentService
バインドに基づいて除外されなかったとしても、バックグラウンド スレッドで既に呼び出されているため、別のバックグラウンド スレッドは必要ありません。onPerformSync()