Для чего нужен Bound Service

«Для чего нужен Bound Service» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Bound Service используется для взаимодействия между компонентами приложения (например, Activity и Service) через интерфейс IPC (межпроцессного взаимодействия). Он работает, пока есть хотя бы один клиент, и уничтожается, когда все клиенты отключаются.

Пример:

class MyBoundService : Service() {
    private val binder = LocalBinder()

    inner class LocalBinder : Binder() {
        fun getService(): MyBoundService = this@MyBoundService
    }

    override fun onBind(intent: Intent): IBinder = binder
}

// В Activity:
private lateinit var boundService: MyBoundService
private var isBound = false

private val connection = object : ServiceConnection {
    override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
        val binder = service as MyBoundService.LocalBinder
        boundService = binder.getService()
        isBound = true
    }

    override fun onServiceDisconnected(name: ComponentName?) {
        isBound = false
    }
}

Используется для долгосрочных операций, требующих прямого взаимодействия (например, музыкальный плеер).