[Android] Service の使い方

Android7

Servce はバックグラウンドで作業をさせたい場合に使います。ActivityがFrontで動作しますがバッテリー消費を抑えるためにシステムは直ぐにスリープに入れてしまいます。それでも裏で色々やりたい場合に有効です。

バックグラウンドでタイマーを使ってカウントアップするテストアプリを作ってみます。

sercice_0

Android Studio 2.2.2
Android 7.1.1

 


Service

 
Serviceには2種類あります

  1. startService()
    • 呼び出し側からの制御はできず、開始か停止させるのみ
  2. bindService()
    • サービスを制御できる、呼び出し元のActivityが終了すると一緒に終了

今回は、常駐させたい場合なので startService() です
 

startService()

 
Activity からサービスを呼び出すのはActivityの画面遷移と同様に
Intent をセットして startService(intent) で行います。
 

 
Activity から Activity に遷移させる場合は
startActivity(intent)でしたので、startService(intent)に変わっただけとわかりやすです
 
一方、サービス側は

 
Service を継承して

  1. onCreate()
    • これはActivity同様、最初だけ呼ばれて終わりなので初期化だけです。
  2. onStartCommand()
    • サービスで実行させたいコードはここに記述
  3. onDestroy()
  4. onBind()
    • bindService() で呼び出した場合
      onStartCommand() ではなく
      onBind() がcallbackされます

 
Manifest にサービスクラスの定義を忘れないように
AndroidManifest.xml

 

これらをまとめると
 
MainActivity.java

 
サービス側でTimerTask()を使ってタイマーカウントを開始させます。
ServiceTimer.java

 
レイアウトです、今回は結果をLogで出力するだけなのでService の開始と終了のボタンだけです。
activity_main.xml

AndroidManifest.xml

 

Logの結果です
これはアプリを終了させてもバックグラウンドで1sec 毎にカウントアップしているのがわかります。

止めるためにはこのテストアプリでは起動している状態でSTOPボタンを押さないと止まりません。
実際のアプリでは気を付けていないと動きっぱなしでバッテリー消費が大きくなる危険性があるので注意しましょう。