Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Определить из Сервиса запущено ли Активити

#android #activity #service


Из Активити запущен сервис, в котором запускается таймер.
Когда таймер закончит отсчет, нужно проверить, запущено ли Активити (за это время
пользователь может его закрыть, может не закрыть, может закрыть и снова открыть). В
зависимости от этого, либо сервис сам останавливается, либо в Активити передается сообщение
о том, что нужно нажать кнопку остановки. 
У меня для того ,что бы сервис знал о состоянии Активити, оно отправляет ему сообщения
startService(new Intent(this, MyService.class).putExtra("Mode", 0[1]));
каждый раз при запуске и при закрытии. 
Вопрос: Есть ли более эффективный метод проверки из сервиса, запущено ли породившее
его Активити? Если нет, откуда лучше отправлять сообщение startService ( OnCreate/OnDestroy,
OnResume/OnPause)? 
    


Ответы

Ответ 1



При завершении работы отправьте уведомление в активити (бродкастом или через EventBus) и создайте задачу через 2 секунды остановить сервис. Из активити при получении уведомления отправляйте подтверждение. Сервис, при получении подтверждения может отменить задачу остановки самого себя. Отсутствие подтверждения считайте отсутствием активити.

Ответ 2



Как вариант запустить Bound Service и при вызове Activity.onDestroy() известить Service о своей гибели. Так что к моменту завершения сервиса у него всегда будет информация о том жив ли Activity, который его запустил.

Комментариев нет:

Отправить комментарий