続・Androidでサービスを作る(落ちないやつ)

前回、Androidでサービスを作る方法を書きましたが、サービスって言うやつは便利で、システムのメッセージを取得できたりします。ですが、所詮アプリケーションとして動くサービスなので、システムによって不意に落とされてしまう事もあります。今回は、【起動時に自動で起動】、【終了されても自動で復活】(強制終了された場合は再帰不能)する方法を書きます。

まず、起動時に自動で起動についてですが、AndroidにはBroadcastReceiverという便利なものがありまして、これがシステムのイベントが起こったときのメッセージを受信してくれます。BroadcastReceiverは、アプリケーションの中に入っていて、インストールさえされてれば動作します。ただ、前回の記事にも書いたように、インストールされて一度も起動されていないサービスは、システムのメッセージを受信できないので注意が必要です。

それでは、起動したいサービスをServiceSample、Android起動時のメッセージを受信するレシーバをBootReceiverとしてコードを書きます。

コードとしてはこれだけ。あとはこれを「レシーバ」として、AndroidManifest.xmlに登録すればOKです。ですが、onReceiveは起動時に限らず、全てのメッセージが発された時に呼び出されるメソッドです。従ってこれだけではどんなメッセージを受け取った際もサービスを起動するようなコードになってしまいます。そのため、AndroidManifest.xmlの中でintent filterをかけます。レシーバの登録と、intent filterの記述は以下のようにします。

これでBOOT_COMPLETEDのメッセージ以外受け付けなくなるので、Android起動時に立ち上がるサービスは出来ました。次に、終了されても自動で復活する処理ですが、これはサービスのonDestroyメソッドに以下のような処理を記述します。

onDestroyメソッドの中で非同期処理でサービスをスタートします。このとき、System.exit(0);を使用して、もとのサービスをしっかり終了してあげないと、2重にサービスが立ち上がってしまう事があるので、注意が必要です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">