фоновая служба Android перестает обрабатывать трансляции событий - PullRequest
0 голосов
/ 06 ноября 2010

У меня проблема с моим приложением для Android. Я использую фоновый сервис (с уведомлением в строке состояния), который выполняет аудио образец каждый час. Для выполнения этого примера я генерирую широковещательное событие каждый час, и когда я записываю событие, начинается аудиозапись. В течение дня, когда я пользуюсь телефоном, у меня нет проблем. Странное поведение происходит ночью, когда кажется, что телефон переходит в состояние «ожидания»: события трансляции больше не обрабатываются. Из файла журнала я понял, что события генерируются и помещаются в очередь ... и когда я снова начинаю пользоваться телефоном, все эти события возникают в один и тот же момент. У вас есть идеи о том, как решить эту проблему? Как заставить телефон продолжить обработку моих событий? я должен установить любую переменную флага, чтобы телефон не переходил в такое состояние "ожидания"? надеюсь, кто-нибудь может мне помочь!

спасибо заранее! Микела

1 Ответ

0 голосов
/ 06 ноября 2010

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

Почему бы не использовать AlarmManager, чтобы вы не занимали столько памяти? Пользователям действительно не нравятся вечные услуги.

Странное поведение происходит ночью, когда кажется, что телефон переходит в состояние ожидания: события трансляции больше не обрабатываются.

Конечно.

У вас есть идеи о том, как решить эту проблему?

Используйте AlarmManager и WakefulIntentService. Запланируйте AlarmManager для вызова вашего приложения каждый час (в идеале через setInexactRepeating()). Попросите WakefulIntentService получить ваш образец. Если вы будете следовать задокументированному рецепту WakefulIntentService, устройство будет бодрствовать достаточно долго, чтобы вы могли получить образец, а затем снова заснет. Ваш сервис не останется в памяти все время. Вы получаете свою функциональность, а пользователь получает лучшую производительность устройства.

Do NOT просто используйте WakeLock, чтобы ваше приложение не только постоянно потребляло память, но и постоянно работало ЦП.

...