Android開発 | Androidで落ちない常駐サービスを作る方法
2017/06/21
Androidアプリ開発で、端末スリープ時や他のアプリ起動中も動き続けるサービスを作るための方法です。サービスを起動しても、しばらくすると勝手に終了してしまうことがあると思いますが、その時の対策です。
onStartCommandの戻り値をSTART_STICKYかSTART_REDELIVER_INTENTにする
サービスのメソッドであるonStartCommandの戻り値を「START_STICKY」または「START_REDELIVER_INTENT」にすると、サービスが停止しても再起動が行われます。
「START_STICKY」と「START_REDELIVER_INTENT」の違いは再起動時に終了前のintentが保持されるかどうかの違いのようです。「START_REDELIVER_INTENT」の場合は終了前のintentが保持されていてonStartCommandに再度渡されます。
startForegroundを使用する
サービスの中で、startForegroundメソッドを使用して通知バーを表示すると、メモリ不足時等の強制終了対象にほぼならなくなります。
よく通知バーに常駐表示しているアプリ(050plusなど)があると思いますが、それと同じ仕組みかと思います。
これをしないと、メモリが不足してきたときにサービスが勝手に落とされたりします。
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentTitle(getText(R.string.xxx));
builder.setSmallIcon(R.drawable.xxx);
builder.setContentText(getText(R.string.xxx));
startForeground(NOTIFICATION_ID, builder.build());