У меня есть приложение для записи звука, для которого я сейчас разрабатываю виджет.
Запись выполняется аудио движком, работающим в сервисе, переведенном в состояние переднего плана.
Всякий раз, когда состояние звукового движка изменяется на паузу / воспроизведение / запись, широковещательная рассылка отправляется и обрабатывается получателем, который обновляет виджет.
Таким образом, нажатие на кнопку записи в виджете начинает запись, что приводит к отправке трансляции, а в конце кнопка записи становится красной в виджете. То же самое происходит, если вы начинаете запись из приложения, а не из виджета.
Пока все хорошо.
Теперь, если служба по какой-то причине убита, onDestroy () не вызывается, и у меня нет возможности отправить паузу или сообщение о выключении, чтобы кнопка записи отключилась. Результат: кнопка остается красной, в то время как запись остановлена.
Это худшее, что может случиться.
Почему? Пользователь смотрит на свой домашний экран, видит красную кнопку и думает, что запись все еще выполняется.
Это не похоже на воспроизведение музыки, когда пользователь может заметить, когда музыка перестает воспроизводиться через наушники ... Во время записи вы ничего не услышите, если она остановится.
Я понимаю, что система должна убивать службы. Я в порядке с этим. Мне не нужен сервис для перезапуска и все такое.
Но мне нужно обновить виджет, если служба закрывается, чтобы пользователь не был введен в заблуждение, думая, что его интервью / концерт / репетиция / памятка все еще записывается, а это не так.
Так как я могу быстро обновить виджет , если служба будет убита?