Вопрос

Я новичок до понятия Wakelock и нуждаюсь в вашей помощи.

Вопросы:

  1. Я предполагаю, что Wakelock был некоторым типом блокировки, который когда удерживается выполнением кода, предотвращает спать устройство. Что если устройство уже в режиме ожидания / режима ожидания, будет ли код выполнить код? Предполагая, что это никогда не приобретает Wakelock?

  2. Когда длительная рабочая задача (ABT 7-8 SEC) выполняется в фоновом потоке (Asyncckask), я должен быть надоело удерживать Wakelock? Асинктка уже приобретает это для меня?

  3. Знаются ссылки на официальные документы и перезаписе на Wakelocks.

Спасибо.

Это было полезно?

Решение

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

От AlarmManager Класс Документация:

Менеджер тревоги держит CPU Wake Lock До тех пор, пока оженновающий () метод тревоги получателя выполняется. Это гарантирует, что телефон не будет спать, пока вы не закончите обработку трансляции. Как только Onreceive () возвращается, менеджер тревоги выпускает этот разбойник. Это означает, что телефон в некоторых случаях будет спать, как только ваш onreceive () метод завершится. Если ваш тревожный приемник называется context.startservice (), возможно, что телефон будет спать до запрашиваемой службы. Чтобы предотвратить это, ваш BroadCastreceiver и Service необходимо будет реализовать отдельную политику блокировки разбойников, чтобы убедиться, что телефон продолжается до тех пор, пока не станет доступной услуги.

2. Если вы работаете с Асинктюз, вы захотите опубликовать результаты на тему пользовательского интерфейса на onPostExecute()

От Асинктюз документация:

Asynctask обеспечивает правильное и простое использование нити UI. Этот класс Позволяет выполнять фоновые операции и публиковать результаты на потоке UI без необходимости манипулировать нитями и / или обработчиками.

3. Я предложил, что у вас есть чтение по официальной документации Менеджер питания Что дает хорошее введение в концепцию Wakelock.

Другие советы

  1. Как правило, единственный код, который запущен, когда телефон спит, это BroadcastReceiver. Отказ На самом деле, телефон просыпается на секунду, управляет BroadcastReceiverКод и спит снова. Так как вы никогда не должны запускать длинный код в BroadcastReceiver (Используйте его, чтобы запустить Service Вместо этого), вы можете в основном предполагать, что ваш код никогда не работает, пока телефон спит. Конечно, если вы используете BroadcastReceiver начать А. Service, вы обычно должны получить Wakelock.

  2. С AsyncTask Инициировано пользователем, вам не нужно беспокоиться о Wakelocks. Вряд ли телефон будет спать, пока он работает. Я не уверен, что они получат Wakelock, но положил мой телефон спать во время запуска стандарта AsyncTask Похоже, не прерывает его.

  3. Как сказал сказал, проверьте это: http://developer.android.com/reference/android/os/powermanager.html.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top