Androidのインターネット接続について調べていたところ、これを処理するにはさまざまな方法があることに気づきました。AsyncTask
そしてIntentService
ただし、どちらを使用するかはまだわかりません。私のアプリケーションは基本的に、Google マップを使用した場所/トレイル ファインダーです。インターネット接続を使用して、マップの特定の半径内にある最も近いトレイルを検索します。そのため、ユーザーがマップを新しい場所に移動またはスワイプするたびに、最も近いトレイルが更新されます。また、新しいトレイルが追加され、ユーザーがトレイルを評価できるようになります。
これで十分でしょうかAsyncTask
、それとも を使うべきでしょうかIntentService
?
ベストアンサー1
それらは、さまざまな目的に応じて、まったく異なる方法で使用できます。
AsyncTask
は、ユーザーに何かを絶えず伝えたり、メイン スレッドで定期的に操作を実行したりする必要がある場合に使用できる便利なスレッド ユーティリティです。 は、きめ細かい制御を多数提供し、その性質上、 での操作が非常に簡単です。一方、 ではActivity
通常、IntentService
または フレームワークを使用する必要がありBroadcastReceiver
ますIBinder
。
IntentService
は と非常によく似ていますAsyncTask
が、その目的は、ユーザーの操作やメイン スレッドを必要としないバックグラウンドでのダウンロード、アップロード、またはその他のブロッキング操作を行うことです。たとえば、地図をダウンロードしてキャッシュする場合、 を呼び出して、IntentService
ダウンロードのためにユーザーがアプリを見ている必要がないようにすることができます。同様に、データをサーバーに送信する場合、 はIntentService
この点で非常に役立ちます。なぜなら、起動したら忘れてよいからです。たとえば、ユーザーはアプリにコメントを入力して「送信」を押すことができます。「送信」は を起動し、IntentService
コメントを取得してバックグラウンド スレッドでサーバーに送信します。ユーザーは「送信」を押してすぐにアプリを離れることもできますが、コメントは最終的にサーバーに届きます (もちろんエラーがない場合)。一方、 でこれを行った場合AsyncTask
、Activity
システムによって交換の途中でプロセスが強制終了され、処理が完了するかどうかはわかりません。
一般的に言えば、どちらも長時間実行されるアプリケーション向けではありません。短時間の 1 回限りの操作向けです。永続的または長時間実行されるアクションに使用することもできますが、お勧めしません。