[Android] Service の使い方

Servce はAndroidのActivityがFrontでいろいろ動作している状況に対して、バックグラウンドで作業をさせておきたい場合に使います。

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

sercice_0

Android Studio 2.1
Android 6.0

 

sponsored link

Service

 
Serviceには2種類あります

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

それぞれ良し悪しがありますが、今回は、常駐させたい場合なので startService() です
 

startService()

 
Activity からサービスを呼び出すのは
Intent をセットして startService(intent) です
 

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

 
Service を継承して

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

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

 

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

 
サービス側
ServiceTimer.java

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

AndroidManifest.xml

 

Logの結果です
1sec 毎にカウントアップしているのがわかります