0

私のアプリケーションでオンラインデータベースからローカルデータベースにデータを同期させたいと思うと、私はサービスが探しているコンポーネントだと理解しています。IntentServiceから新しいスレッドを実行する

通常のサービスを開始すると、それはメインスレッドで開始されることがわかります。実行すると時間がかかるタスクはUIをブロックします。つまり、AsyncTaskのようなものを使用してジョブを完了させる必要があります。

一方、インテントサービスを使用すると、それは並列スレッドで実行され、長いタスクを実行するとUIがブロックされないことが分かります。 私が呼び出す他のインテントサービスは、キューに入れられます。

しかし、ネットワーク呼び出しを行うためにIntentServiceから並列スレッドを作成するとどうなりますか?

インテントサービスは、ネットワークコールが完了するのを待つか、並列スレッドでコールを行い、キュー内の次のインテントサービスを実行しますか?

+1

なぜネットワークコールを行うために並列スレッドで並列スレッドを作成する必要がありますか? 'IntentService'で正しく使用してください –

+0

なぜ' if'文が終了する並列スレッドですか? – Xenolion

+0

私はちょうど興味があった。私はそのハハを作っていない –

答えて

0

Serviceのメイン(UI)スレッドでライフサイクルコール(例:onCreate()onStartCommand())のみが呼び出されます。背景の行為がある場合は、onStartCommand()に独自の背景スレッドを作成することができます。これにはIntentServiceを使用する必要はありません。

IntentServiceは、特定の動作を持つServiceの特定の実装です。 startService()を呼び出し、実行する作業を記述するIntentを渡して、「仕事」を送信します。 IntentServiceは、キューに入れられたすべての「仕事」が完了するまで実行され、その後自分自身をシャットダウンします。 IntentServiceは、 "work"のキューイング、バックグラウンドスレッドでの "work"の実行、IntentServiceの自動シャットダウンを処理する通常のServiceの上にあるthi8nレイヤーです。これがあなたが望む動作ではない場合は、すべての状況に適していないので、IntentServiceを使用しないでください。 Serviceのバックグラウンドスレッドを開始するのはそれほど難しいことではありません。

関連する問題