【Android】JobServiceでバックグラウンドから30分おきに通知表示してみる

Androidのバックグラウンド実行

前々まではこういうのを使ってました

  • ForegroundService
  • IntentService
  • AlarmManager

もちろん今でも使えるAPI達です

ですが実行時間が極端に短かったり、
API変更で裏で動かすのが難しくなりました

そこで登場したのがJobService

ここではこれを使って、

  • JobServiceを拡張して作成し、
  • バックグラウンド実行の登録し、
  • 30分おきに通知を表示する

ということに挑戦してみました。

本当にエッセンスなことだけを解説します。
とにかくバックグラウンド実行するのが目的です

0.初めにJobServiceの制限とできることについて

JobServiceがどういった性質を持つのか…

それは箇条書きするとこうなります。

  • バックグラウンドで様々な処理を動かせる
  • 動かせるAPIに制限とかはないらしい
  • 最小の定期実行間隔は15分(おそらく)
  • ジョブの最大実行時間は10分ほど

数秒しか動かせないServiceと大違いです。
最大で1回あたり10分も動かせちゃいます。

大雑把な性質はこういう感じです。

1.まずJobServiceを拡張したクラスを作る

まずJobServiceを拡張したクラスを作ります

名前は NFTJobService とでもしましょう

※ NTF = Notificationの略

▼ 通知表示するコード例は次の通り

スケジューラーが起動すると JobService#onStartJob が呼ばれます。

そこに通知表示・バッググラウンド処理を書けばOKです

2.AndroidManifest.xmlに自作サービスを登録

今作ったJobServiceを登録します。

▼ AndroidManifest.xmlに追加

このタグをapplicationタグの内部に書くだけ

説明不要と思いますが android:name=".NTFJobService"  のように先ほど作ったJobServiceを登録してます。あと android.permission.BIND_JOB_SERVICE  というパーミッションも必須みたいです

3.MainActivityなどからJobServiceを起動する

最後はActivityからサービス起動するだけ

ここではMainActivityがあるものとします。

▼ MainActivity内で次のコードを実行

あとはJobSchdulerが定期的に実行されます。

実際にJobServiceで通知表示してみた様子

このような感じで正常に動作しました。

▼ バックグラウンドから通知表示できた

JobServiceで30分おきに定期実行するサービスから通知が表示された時の様子

応用すれば色々なことに使えそう

ここまでのJobServiceの実行方法まとめ

簡単に箇条書きするとこんな感じ

  1. JobServiceを拡張したクラスを作る
  2. AndroidManifest.xmlに自作サービスを登録
  3. ActivityなどからJobServiceを起動する

従来のサービスより使い勝手がアップしてます。

ただし最大実行時間は10分なことに注意

以上、JobServiceによる通知表示でした。ではまた