Android: приложение, работающее в фоновом режиме - PullRequest
1 голос
/ 05 января 2012

Я создал приложение, которое подключается к моему серверу каждые 5-10 минут и проверяет наличие каких-либо изменений в базе данных.

Поэтому я использую Сервис, чтобы приложение могло работать в фоновом режиме, а пользователь мог закрыть приложение и получать сообщения в строке состояния. Внутри я использую Thread, чтобы приложение спало 5-10 минут. Проблема начинается, когда я блокирую телефон. чем приложение просто останавливается (это потому, что когда вы блокируете ваш телефон переходит в «спящий режим»), я понял, что мне это нужно:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'My Tag');      
wl.acquire();

Это заставляет телефон не спать, кроме экрана. Но там я застрял. Это прекрасно работает, но сильно разряжает батарею. 10% в час :( И я считаю, что нет проблемы в том, что приложение должно заставить эти веб-сервисы запрашивать все их запросы, кроме той функции, которая заставляет этот телефон быть живым.

Итак, мой вопрос, есть ли какое-то другое решение, которое я могу использовать, потому что у меня есть какое-то приложение на телефоне, которое работает в backgorund, но они вообще не разряжают батарею (avast, защитник сока и т.д. ).

Любая идея очень полезна!

привет!

Ответы [ 5 ]

1 голос
/ 05 января 2012

Диспетчер аварий и приемник Broadcst - ваши друзья. И вы также можете подумать о том, насколько важны изменения в строке состояния, если телефон лежит глубоко в заднице. Это настолько важно, что это должно произойти даже в этом случае?

1 голос
/ 05 января 2012

Google I_O 2009 - Кодирование на всю жизнь - срок службы батареи, то есть

http://www.youtube.com/watch?v=OUemfrKe65c

это ответит на ваш вопрос.

1 голос
/ 05 января 2012

Вы должны освободить вейк-шоки как можно скорее.Не используйте их.Вместо этого попробуйте приемник Broadcast и AlarmManger, чтобы сделать то, что вы хотите.

1 голос
/ 05 января 2012

Как насчет использования механизма push, такого как C2DM для Android , вместо того, чтобы все время опрашивать.

0 голосов
/ 05 января 2012

Вы можете установить AlarmManager с флагом RTC на каждые 5 минут для запуска Сервиса (возможно, IntentService лучше), внутри Service Acquire wakelock при выполнении сетевых операций и остановке сервиса, как только вы закончите.

...