2013年11月30日

[Android] IntentServiceを継承したServiceをBroadcastReceiverの中に書く

IntentServiceという便利なクラスがあります。
バックグラウンドで動作してくれて、処理が終わったら勝手に終了してくれるService(という認識)です。
BroadcastReceiver契機で時間のかかる処理を行いたいときに使うと便利ですね。

今回は特定のBroadcastReceiverからしか呼ばれない処理だっため、以下のようにIntentServiceを書いてみました。
public class HogeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// ... なんらかの処理

context.startService(new Intent(context, FugaService.class));
}

public static class FugaService extends IntentService {
public FugaService() {
super("FugaService");
}

@Override
protected void onHandleIntent(Intent intent) {
// ... バックグラウンドで行いたい処理
}
}
}


AndroidManifest.xmlはこんな感じ。
<receiver android:name=".HogeReceiver" />
<service android:name=".HogeReceiver$FugaService" />


ここでのBroadcastReceiverとServiceは2つで1つな感じなので、こんな感じで書いた方がつながりがわかって良いかな、と思った次第。
IntentServiceのクラスを外側にしても良いかもしれない。
BroadcastReceiver内に非同期処理が書ければこんな書き方しなくて済むのですけどね。

posted by t2low at 21:00| Android