AndroidのService#OnStartCommand()の返り値


Androidのサービスは、起動する時に呼ばれるメソッドOnStartCommandの返り値によって強制終了された時の振る舞いが変わります。

START_STICKY
強制終了されても自動的にサービスが再起動されます。再起動時にはOnStartIntentに渡されるintentがnullの可能性があります。
START_NOT_STICY
強制終了されても再起動はされない。
START_REDELIVER_INTENT
強制終了されても自動的にサービスが再起動されます。この時START_STICKYとは異なり最初に起動された時のintentが再起動する時にも渡されます。

START_STICKY or START_REDELIVER_INTENT

サービスが強制終了された時に自動的に再起動するための返り値が二種類あるけど、intentの有無の他に違いはないのでしょうか?

そこで簡単に実験してみたところ、START_STICKYとSTART_REDELIVER_INTENTではサービスが再起動されるまでの時間が異なるようです。具体的には、START_STICKYは強制終了してもすぐに再起動されますが、START_REDELIVER_INTENTは再起動されるまでに分単位で時間がかかりました。

返り値 再起動までの時間
START_STICKY すぐに再起動
START_REDELIVER_INTENT 再起動まで1分くらい

サービスが強制終了させられてもすぐに同じintentでサービスを開始したい場合は、intentの内容をSharedPreferenceやデータベースに書いておき、START_STICKYを指定してサービスを起動するのが良さそうです。そしてintentがnullでサービスが起動されたら保存しておいたintent内容を読んで再開するという方法を取ります。

参照

Service – Developers


コメントを残す

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