Ответ
Для выполнения работы в Service не на главном потоке можно использовать:
- IntentService (устарел, но прост в использовании):
class MyIntentService : IntentService("MyIntentService") {
override fun onHandleIntent(intent: Intent?) {
// Работа в фоновом потоке
}
}
- JobIntentService (современная замена IntentService):
class MyJobIntentService : JobIntentService() {
override fun onHandleWork(intent: Intent) {
// Работа в фоновом потоке
}
}
- Coroutines (рекомендуемый способ):
class MyService : Service() {
private val scope = CoroutineScope(Dispatchers.Default)
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
scope.launch {
// Работа в фоновом потоке
}
return START_STICKY
}
override fun onDestroy() {
scope.cancel()
super.onDestroy()
}
}
- Thread/HandlerThread (низкоуровневый подход):
val handlerThread = HandlerThread("ServiceHandler")
handlerThread.start()
val handler = Handler(handlerThread.looper)
handler.post { /* Работа в фоне */ }