Serviceが起動しているか確認する

2021/02/05
Android
Service
LocalBroadcastManager

Androidアプリ開発において、Serviceが起動しているか他のコンポーネントから確認する方法です。

環境

  • compileSdkVersion 29
  • minSdkVersion 21
  • androidx.localbroadcastmanager:localbroadcastmanager:1.0.0

方法

Serviceに対してBroadcastを投げて生存確認をすればServiceが起動しているか確認できます。 LocalBroadcastManager[1] を使うと簡単です。下記のようにobjectに機能を隠蔽できると利用しやすいですね。

class SomeService : Service() {

    companion object{
        private const val ACTION_SERVICE_PING: String = "com.hassakulab.xxx.SomeService_is_running"

        fun isActive(context: Context): Boolean{
            return LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(ACTION_SERVICE_PING))
        }
    }

    private val localBroadcastManager: LocalBroadcastManager by lazy {
        LocalBroadcastManager.getInstance(this)
    }

    private val broadcastReceiverPing = object: BroadcastReceiver(){
        override fun onReceive(context: Context?, intent: Intent?) {
            //  nop
        }
    }

    override fun onCreate() {
        super.onCreate()

        localBroadcastManager.registerReceiver(broadcastReceiverPing, IntentFilter(ACTION_SERVICE_PING))
    }

    override fun onBind(intent: Intent): IBinder? {}

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {}

    override fun onDestroy() {
        localBroadcastManager.unregisterReceiver(broadcastReceiverPing)
    }
}

© 2019-2021 hassakulab.com, built with Gatsby