Вам следует подумать о том, чтобы подойти к вашей проблеме с другой стороны.
Попытка сделать вывод, когда система убила вашу Service
, является проблематичной.Приложения (Services
) не уведомляются, когда они завершаются, поэтому обнаружить это условие сложно.Однако выяснить, когда Service
начался, тривиально (onCreate()
).Это ключ к правильному подходу.
Понятно, что вы понимаете, что правильный способ обмена информацией между Activity
и Service
- через привязку.Это другая важная часть решения.
РЕШЕНИЕ
Вы должны продлить срок службы вашего Service
.Прямо сейчас кажется, что вы создаете Service
для явной цели выполнения длительной задачи.Service
создается, когда вы хотите, чтобы задача запускалась, и завершается, как только она заканчивается.Другими словами, область действия Service
и «задача» одинаковы.
Вместо этого вы должны сделать «задачу» дочерней по отношению к Service
;Service
должно существовать несколько дольше, чем «задача».В частности, Service
должен быть доступен при каждом запуске Activity
(если только для передачи информации о состоянии «задачи» Activity
).
Всякий раз, когдаActivity
запускается, он должен привязаться к Service
и зарегистрировать слушателя с помощью Service
.Service
вызывает этого слушателя всякий раз, когда A.) слушатель вновь регистрируется, или B.) «задача» изменяет состояния (запускает или останавливает).Таким образом, Activity
всегда мгновенно информируется об изменениях состояния, если он связан с Service
.
Когда Activity
хочет, чтобы «задача» изменила состояния, он должен сообщитьService
через привязку (или, возможно, вызов startService()
, даже если Service
уже запущен).Service
затем запускает / останавливает фоновый поток (или что-то еще, что вы делаете для выполнения «задачи») и уведомляет любых слушателей.
Если Service
запускает «задачу»в течение некоторого времени, и активность внезапно появляется, тогда Service
ясно знает, что «задача» существует, и Activity
получит эту информацию через слушателя, как только она свяжется.
Когда Activity
останавливается, он должен очиститься, отменив регистрацию слушателя и отсоединив его от Service
.
. При таком подходе устраняется необходимость в SharedPreferences
или для обнаружения, когда Service
остановился.Всякий раз, когда создается Service
, очевидно, что «задание» не выполняется, поэтому Service
всегда будет знать правильный ответ, который нужно дать Activity
.А поскольку Service
должен быть создан до того, как он сможет связываться с Activity
, проблем с порядком операций нет.