onHandleIntent()
のメソッド内から非同期タスクを開始する必要がありIntentService
ますか? onHandleIntent()
私はそれが実行されることを読んだworker thread
ので、そこから始めても安全でしょうasyncTask
か??
3 に答える
IntentService
s はすでにバックグラウンド プロセスです。そこから AsyncTask を開始する必要はありません。また、マルチスレッドに役立つヘルパー クラスです。Activity で使用する場合は、AsyncTaskAsyncTask
どこからでも開始できます。View
の -method で s を操作しないようにしてください。doInBackground()
IntentService 内で複数のスレッドを生成する必要がある場合は、次を使用します。
new Thread(Runnable r).start();
Android で Runnable スレッドを実行する方法の例を参照してください。
何らかのコールバックを呼び出す必要がある場合は、Handlerを使用してください。例については、http://www.vogella.com/articles/AndroidPerformance/article.html#handlerを参照してください。
本当に IntentService 内で AsyncTask を使用する必要がある場合は、AsyncTask で doInBackGround と onPostExecute を呼び出すメソッドを作成できます。このようなもの:
void executeFlowOnBackground(Params params) {
onPostExecute(doInBackground(params));
}
私の場合、これを行ったのは、すべての App 要求が AsyncTask を拡張したクラスによって行われ、実装がコードのリファクタリングが困難だったためです。
AsyncTask クラスは、マルチスレッド化を実現するメカニズムを提供するために使用されるため、イベント スレッドがハングすることはありませんが、サービスを使用しているため、サービスで AsyncTask を使用しないでください。代わりに、長時間実行されるタスクの場合はスレッドを使用できます。本サービスにおいて実行すること。