Когда Android остановит свой процессор без пробуждения? - PullRequest
7 голосов
/ 01 декабря 2011

Я знаю, что Android использует блокировку пробуждения, чтобы процессор работал или экран был включен. Очевидно, что блокировка экрана не позволяет активному таймеру пользователя выключать экран после периода бездействия пользователя.

Но мне интересно, когда именно вступит в силу блокировка процессора?

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

2. Как насчет потока, запланированного с Timer.schedule ()?

3. Это приводит к другому вопросу, если я сохраню длинное сокетное соединение в сервисе, который блокируется в socket.read (). Нужно ли приобретать блокировку пробуждения, чтобы убедиться, что служба будет активирована, когда сокет получит какую-либо форму данных удаленно?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 17 февраля 2012

Ответы на все ваши подвопросы

  1. Android спит, когда активная блокировка не активна. Неважно, какие процессы и потоки запущены, он все еще будет спать. Это означает, что если ваш поток или какой-либо другой процесс там не активировал блокировку пробуждения, ваш поток не будет выполняться и, следовательно, не будет разряжать батарею. Поток станет активным только тогда, когда какой-либо другой процесс получит блокировку.

  2. То же самое применимо к Timer.schedule (). Скажем, вы пишете таймер, который запускается каждую секунду, но без какой-либо блокировки, и говорите, что андроид засыпает на 10 секунд. Когда он разбудит p на 11-й секунде, он определит, что ваш таймер истек 10 раз, он просто отбросит 9 экземпляров и выполнит его только один раз. Если вы хотите очень надежные таймеры, вам придется либо получить блокировку от пробуждения, либо использовать AlarmTimer.

  3. Да.

0 голосов
/ 31 декабря 2014

Что я узнал из различных функций, связанных с Wake-Lock , система Android никогда не будет спать, если она спит, вы не получите SMS, Call, т.е. Android не будет запускать только задачу уровня ОС, когда она включаетсяsleep.
Wake-lock - это механизм, при котором любое приложение может запросить систему, чтобы устройство оставалось включенным для него.Приложение может выполнять операции в фоновом режиме, несмотря на то, что пользователь не перешел к запуску этого приложения.

Для 1 и 2 Акшар объяснил правильно.3. Что касается выполнения каких-либо операций в вашем приложении, когда система находится в спящем режиме (выполняется только задача уровня ОС), сначала вы должны запросить wake-lock у системы, а затем только приложение может выполнять свои операции.После завершения операций вы должны снять блокировку пробуждения, чтобы система могла перейти к управлению задачами на уровне ОС.

...