個人的なバックグラウンド処理における見解をまとめる。
Service の使い時
アプリを終了しても裏側で何かをさせたい時に使う。これは Service しかできない。(Service は別プロセスで動くため)
一時的に裏側で処理をさせたい時は、 AsyncTask や Thread-Hanlder を使う。
IntentService の使い時
IntentService というクラスがあるが、これは裏側の処理をキューとして順次実行してくれるので、重い処理を裏側で実行させたい場合、かつそれらのスレッドが同時に複数起動されないようにしたい場合はこちらを使う。これは処理が終わった瞬間にサービスが停止されるのでプロセスが残り続ける心配がない。 ここら辺は AsyncTask や Thread-Handler でやるとたびたび問題になることがある。
今のところの自分のバックグラウンド処理使い分け基準
- アプリを終了しても裏側で処理をさせたい。 → Service
- 連続した重い処理を実行させたい → IntentService
- Activity内でちょっとした時間のかかる処理をさせて終わったらUIいじる。お決まり処理が多い → AsyncTask
- Activity内でちょっとした時間のかかる処理をさせて終わったらUIいじる。柔軟性が欲しい → Thread-Handler
ちなみにServiceが終わった時に何かしたい場合は Notification を使った方がいい。