как найти то, что разрушило сервис - PullRequest
0 голосов
/ 08 мая 2018

Можно ли определить, кто уничтожил услугу?

У меня есть служба, которая работает в фоновом режиме, и когда пользователь нажимает кнопку, я звоню

 stopService(myService): 

и

onDestroy()

тогда называется. Иногда служба по той или иной причине уничтожается операционной системой. можно ли узнать, остановил ли его пользователь или это была система?

У меня есть служба, которая считывает данные акселерометра и на их основе предпринимает какое-то действие.

служба работает нормально, но иногда система прерывает эту службу, и когда это происходит, я хочу, чтобы служба самостоятельно перезапускалась с помощью AlarmManager через заданные секунды.

Я хочу проверить в onDestroy (), является ли пользователь тем, кто остановил службу, вызывая stopService (), или система это сделала. если пользователь сделал это, нет необходимости перезапускать службу, но если это была система, перезапустите ее

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

stopService () и stopSelf () вызываются только тогда, когда вы хотите явно уничтожить сервис, который в свою очередь вызывает onDestroy ().

И onDestroy () также будет вызываться, когда служба завершит свою работу.

Пожалуйста, обратитесь для более подробной информации:

Android: stopService () не вызывает onDestroy ()!

https://developer.android.com/guide/components/services

0 голосов
/ 08 мая 2018

@ HemantParmar дал хорошую ссылку для чтения, просто проверить, уничтожил ли пользователь службу или саму систему, всякий раз, когда вы вызываете stopService(), используйте логический флаг.

//runningService.stopit();
// OR
stopService(RunningService); // user called

boolean iStopped = true;


public void stopit(){
   //stopSelf();
}

public void onDestroy(){
  super.onDestroy();
  if(iStopped){
   // user did it
  }else{
   // system did it
  }
  iStopped = false; // whoever did it , reset it
}
0 голосов
/ 08 мая 2018

Вы не предоставили достаточно информации, чтобы быть уверенным, но вы, скорее всего, смотрите на фоновые ограничения Android Oreo. Чтобы продлить срок службы батареи, все фоновые службы будут остановлены системой через несколько минут после того, как приложение перейдет в фоновый режим.

Более подробную информацию об ограничениях фона можно найти здесь .

Если ваша версия Android ниже, чем Oreo, или ваше приложение все еще находится на переднем плане, вам необходимо предоставить больше информации об обстоятельствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...