У меня есть услуга
class BusLocationService : Service()
, который запускается как START_STICKY и показывает постоянное уведомление.
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
if (intent.action == Constants.ACTION.STARTFOREGROUND_ACTION) {
registerChannel();
showNotification();
}
return START_STICKY
}
private fun showNotification() {
val notification = ...
startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE,
notification)
}
Он должен периодически (раз в минуту) выполнять некоторый код, но это не так. Он делает это только изредка (вероятно, когда основное действие видно).
private fun startPermissionActivity() {
android.os.Handler().postDelayed(
{
this@BusLocationService.startPermissionActivity()
}, 60000)
}
Это postDelayed
ненадежно? Или проблема в другом? Что еще может заставить сервис пропустить таймер?
Обновление
При тестировании в эмуляторе дома (видна активность) я вижу, что код выполняется раз в минуту. Проблема возникает на реальном устройстве (OnePlus 3T) и когда активность находится в фоновом режиме. Иногда это работает (редко), иногда (часто) это не работает.