PARTIAL_WAKE_LOCK против SCREEN_DIM_WAKE_LOCK в теме загрузки - PullRequest
9 голосов
/ 03 марта 2011

У меня есть служба, которая порождает поток загрузки, который загружает иногда большие файлы.Я понял, что как только телефон перейдет в спящий режим, поток загрузки значительно замедлится, а затем остановится.

Очевидное лекарство, будильник.Так что я думаю, что было бы неплохо получить частичную блокировку_запуска, просто чтобы процессор обрабатывал загрузку.Это не работает, однако, такое же поведение, загрузка замедляется, а затем останавливается, когда экран выключается.

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

Мой вопрос: почему я не могу поддерживать поток, когдаудерживать частичную блокировку так же, как и во время блокировки экрана?Есть ли какое-то недокументированное поведение о разнице между этими двумя?Возможно, это из-за того, что я не работаю в потоке пользовательского интерфейса?

РЕДАКТИРОВАТЬ:

Я добавил вайфлок.Wi-Fi не идет спать, но моя нить все еще умирает.Если какой-либо другой процесс пробуждает систему, загрузка будет продолжаться с нормальной скоростью, а затем снова замедляется.Если я просыпаюсь, телефон будет работать с нормальной скоростью, а затем снова замедлится, когда экран погаснет.Кажется, что поток выталкивается в фон системой.Интересно, смогу ли я предотвратить это?

Ответы [ 2 ]

1 голос
/ 20 июня 2011

У меня была такая же проблема с вами с одним сервисом, который постоянно загружал большой набор URL-адресов. Лучшим способом было использовать screen_dim_wake_lock, как вы это сделали, и перевести свой сервис на передний план, как описано здесь .

Таким образом, экран всегда включен, то же самое происходит и с вашим интерфейсом WI-FI. И наоборот, если вы оставите телефон в неактивном состоянии на некоторое время, экран выключится, телефон перейдет в спящий режим и WIFI тоже отключится через 15 минут!

Итак, еще один способ - использовать частичный_блок_ (только процессор включен) и изменить настройки вашего телефона таким образом, чтобы WIFI всегда был включен (возможно, это похоже на WIFI_LOCK, который вы приобрели ...):

  • на главном экране перейдите в «Система» или «Настройки», а затем
  • выберите Беспроводные сети
  • выбор настроек WI-FI
  • нажмите Меню и выберите Дополнительно
  • нажмите Политика сна Wi-Fi и измените ее на Никогда

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

если вы на какое-то время потеряете соединение WIFI, то Android может убить ваш сервис, потому что он будет неактивен. Но если ваш телефон всегда подключен к сети WIFI с хорошей стабильностью, то все будет работать нормально!

0 голосов
/ 11 июня 2012

Взгляните на замок Wifi вместе с частичным замком:

http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html

...