Android-сервис убивают очень быстро
Я разрабатываю приложение, которое использует Сервис. Сам сервис работает, но системы Android убивают его в течение 30 секунд после выхода из моей Активности, иногда даже через 6 секунд.
Я посмотрел много разных постов по этому поводу и знаю, что могу использовать службу переднего плана со значком. На данном этапе я не хочу идти по этому пути.
Я явно запускаю службу со следующим кодом. Служба контролируется SwitchPreference. Служба также возвращает START_STICKY, поэтому она перезапускается.
Это код, который я использую (не запускаться вместе, как это).
// starting within the activity
Intent intent = new Intent(context, ListenerService.class);
startService(intent);
// stopping within the activity
Intent intent = new Intent(context, ListenerService.class);
stopService(intent);
// Service onStartCommand
return START_STICKY;
При первом выходе из приложения я вижу, что действие уничтожается, а затем в течение 30 секунд я вижу мое всплывающее сообщение о том, что служба была перезапущена.
Я понимаю, что система Android имеет полное право убить мой сервис при нехватке памяти, но стоит ли ожидать, что он будет убит почти сразу после выхода из приложения? Это просто мусор, собирающий ссылки на мои действия и запускающий сервис "clean"?
Я очищаю объекты в моем методе onStop() действия.
Кроме того, когда я возвращаюсь в свое приложение через действие, рекомендуется ли связываться со службой, чтобы получить ссылку на объект службы? Привязка выполняется в методе onStart() действия следующим образом:
Intent intent = new Intent(this, ListenerService.class);
bindService(intent, serviceConnection, 0);
Отмена привязки завершена в методе onStop()
unbindService(serviceConnection);
Итак 2 вопроса:
1. Стоит ли ожидать, что система Android убьет и перезапустит мой сервис практически сразу?
2. Приемлема ли моя методология связывания?
Большое спасибо
1 ответ
Из того, что я понимаю, вы контролируете жизненный цикл своего сервиса посредством своей деятельности, вызывая startService и stopService. Это правильно?
Если вы хотите, чтобы служба работала, почему вы вызываете на ней stopService?
Что касается перезагрузки службы - все зависит от конфигурации службы и реализации вашего кода.