2012-01-05 6 views
1

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

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

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

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

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

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

привет!

ответ

1

Что об использовании нажимного механизма, например, C2DM for Android, вместо опроса всего на время.

1

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

1

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

0

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