Android: рекомендуемый способ, чтобы PhoneStateListener работал вечно?

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

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

Я зарегистрировал BroadcastReceiver, который запускается после BOOT_COMPLETED.

В этом BOOT_COMPLETED BroadcastReceiver я запускаю службу.

Служба запускает мой PhoneStateListener.

В моем BOOT_COMPLETED BroadcastReceiver я также запускаю периодическую тревогу через AlarmManager.setInexactRepeating.

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

Кажется, все это работает для меня, но мне интересно, является ли это лучшим и наиболее эффективным способом обеспечения того, чтобы PhoneStateListener работал все время (или, по крайней мере, большую часть времени).

Возможно, есть лучший способ справиться с этим?

Заранее спасибо.


person HippoMan    schedule 10.10.2015    source источник


Ответы (1)


Вы можете сделать свою службу службой переднего плана, в этом случае ваша служба действительно вряд ли будет убита (только если текущему открытому приложению требуется больше памяти).

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

Для этого необходимо вызвать startForeground() метод вашего сервиса, предоставив ему уведомление:

startForeground(ONGOING_NOTIFICATION_ID, notification);

Дополнительные сведения см. на странице http://developer.android.com/guide/components/services.html#Foreground

person hunyadym    schedule 10.10.2015
comment
Большое спасибо. Я не упомянул в своем исходном посте, что предпочитаю не делать это сервисом переднего плана. Цель приложения — экономить электроэнергию, а перевод службы на передний план противоречит этой цели. В любом случае, я думаю, что метод, который я описал, вероятно, лучший, который я могу сделать, не переводя службу на передний план. - person HippoMan; 11.10.2015
comment
Я не эксперт по вопросам энергопотребления, но поскольку большая часть энергопотребления связана с тем, что устройство не спит, и я думаю, что перевод вашей службы на передний план не сделает устройство более бодрствующим, чем наличие обычной службы, которая никогда не отключается как вы и предполагали (вместо этого, может быть, немного меньше, потому что вам не нужно будить устройство, чтобы проверить, работает ли ваша служба). Службы переднего плана могут быть опасны для энергопотребления, если они потребляют много памяти, и из-за этого системе приходится закрывать другие приложения, но это то же самое, если вы регулярно принудительно запускаете свою службу. - person hunyadym; 11.10.2015