前回ServiceをAIDLを使って弄ぶ練習、前々回(端末に新規アプリがインストールされたらログを吐く)に引き続き、 IntentService の利用方法とか、ほとんど覚えていないので、メモを残す。
概要
前回、Serviceを使ってみたけど常駐する必要はなかったので、IntentServiceを実装すれば充分かなという自己完結。
こいつはキューがなくなったら自分でdestroyするみたいで、明示的にServiceをstopする必要もなく、楽ちんだし便利ぽい。work queue processorパターンとかいうみたい。
アプリが新規にインストールを検知したら、IntentServiceを起動してオシマイって流れが、シンプルかなと思う。
ここでは単純にログを吐いているだけだが、何か裏側で重い処理をしようってんなら、この作りでいいんじゃまいか。
実装
だいたい下記ファイルを眺めればわかるかと。
AndroidStudioでIntentServiceを生成したら、
勝手にヘルパーメソッドを作成してくれて、サンプルを作る分には楽だった。
レシーバはアプリと同じプロセスにし、サービスは別プロセスにした。
AndroidManifest.xml
<service
android:name=".services.ShoutIntentService"
android:enabled="true"
android:exported="false"
android:process=":shout" />
<receiver
android:name=".receivers.AppInstalledObserveReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package" />
</intent-filter>
</receiver>