1

SyncService以下の Google 提供の例で のService代わりに を使用しているのはなぜIntentServiceですか? バックグラウンドで実行されるのは私の理解ですがIntentServices、通常Serviceはメインスレッドで実行されます。データを更新するだけの UI のないものを、なぜメイン スレッドで実行する必要があるのでしょうか。フレームドロップのリスクはありませんか?

http://developer.android.com/training/sync-adapters/creating-sync-adapter.html#CreateSyncAdapterService

スタンドアロンにすることは可能IntentServiceですか? または、メインスレッドで実行されているものに基づく必要がありますか? Serviceこれが、通常の上記を使用する理由を理解できる唯一の理由です。

4

1 に答える 1

3

IntentServices はバックグラウンドで実行され、通常の Service はメイン スレッドで実行されることを理解しています。

オブジェクトはスレッド上で実行されません。メソッドはそうします。

IntentServiceから継承しServiceます。の主なライフサイクル メソッドはService、特にonStartCommand()メイン アプリケーション スレッドで呼び出されます。の呼び出しによってトリガーされるメソッドIntentServiceを呼び出すために使用するバックグラウンド スレッドを提供します。onHandleIntent()onStartCommand()

データを更新するだけの UI のないものを、なぜメイン スレッドで実行する必要があるのでしょうか。

あなたはそうしない。

以下の Google が提供する SyncService の例では、IntentService ではなく Service を使用するのはなぜですか?

ここではanIntentServiceが不適切だからです。リンク先のドキュメントを引用します。

これを行うには、特別な Android バインダー オブジェクトを同期アダプター コンポーネントからフレームワークに渡すバインドされたサービスを作成する必要があります。このバインダー オブジェクトを使用すると、フレームワークは onPerformSync() メソッドを呼び出してデータを渡すことができます。

IntentServiceと結合パターンはうまく連携しません。

スレッド化の観点からは、Android によって提供されるonPerformSync()バックグラウンド スレッド で呼び出されます。したがって、IntentServiceバインドに基づいて除外されなかったとしても、バックグラウンド スレッドで既に呼び出されているため、別のバックグラウンド スレッドは必要ありません。onPerformSync()

于 2014-11-17T15:28:23.953 に答える