Android 非同期で複数の処理


【やりたいこと】  
Android にて非同期で複数の処理をしようと考えています。  
処理 A, B, C... があり、全ての処理が終わったところで UI側にreceiver.sendしたいです。

【やってみたこと】  
Activityから X_IntentServiceを呼び、  
そこから A_IntentService, B_IntentService というように複数の処理を行い、  
全て終わったところで X_IntentServiceから `receiver.send()` しようとしたら  
A,Bなど各IntentServiceにて receiver.send()した時に以下のExceptionになってしまいます。

[code]

    java.lang.RuntimeException: Handler (android.os.Handler) {656e5a68} sending message to a Handler on a dead thread
    
[/code]

そもそも`IntentService`から `IntentService` は呼べない仕組みなのでしょうか？  
A_IntentServiceから receiver.send() した時には X_IntentService
の処理がすでに終わってる、ということでしょうか。  
また、こう言ったケースのベストプラクティスはありますか？




通常のJavaのthread(ワーカースレッド)を使用し、join(待ち合わせ)後に処理を開始すればよいと思います。  
前の方が記述されておりますが、GUIでないスレッド(メインスレッド)から画面を操作するとアプリケーションが異常終了するので、画面を操作する処理の場合はHandlerを使用する必要があります。

注意点として、Activityでthreadを起動した場合、画面遷移(onPouse or
onDestroy)の動作でthreadが動作停止してしまいます。  
上記は、Activityではなく、Serviceからthreadを起動させ、バックグランドで常駐させる事で回避が可能です。この辺りはアプリの実装に依存します。

簡単に纏めると、AndroidのServiceは画面遷移を複数挟んでも継続して欲しい処理に対して使用し、その中で並列で走らせたい処理があった場合は、thread等の非同期処理を使用する。が、実装としてシンプルではないでしょうか。

質問の内容の処理なら、サービスを複数起動する必要はないと思います。




通常のJavaのthread(ワーカースレッド)を使用し、join(待ち合わせ)後に処理を開始すればよいと思います。  
前の方が記述されておりますが、GUIでないスレッド(メインスレッド)から画面を操作するとアプリケーションが異常終了するので、画面を操作する処理の場合はHandlerを使用する必要があります。

注意点として、Activityでthreadを起動した場合、画面遷移(onPouse or
onDestroy)の動作でthreadが動作停止してしまいます。  
上記は、Activityではなく、Serviceからthreadを起動させ、バックグランドで常駐させる事で回避が可能です。この辺りはアプリの実装に依存します。

簡単に纏めると、AndroidのServiceは画面遷移を複数挟んでも継続して欲しい処理に対して使用し、その中で並列で走らせたい処理があった場合は、thread等の非同期処理を使用する。が、実装としてシンプルではないでしょうか。

質問の内容の処理なら、サービスを複数起動する必要はないと思います。

