2013-01-23 3 views
2

Я хочу, чтобы мое приложение поддерживало работу ЦПУ, но выключило экран, чтобы свести к минимуму потери мощности.PowerManager newWakeLock.acquire() не работает как ожидалось

Предыдущие сообщения на эту тему предлагают следующий подход:

mPm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mWakeLock = mPm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Constants.WAKE_LOCK_TAG); 

    mWakeLock.acquire(); //keep CPU running, turn screen off 

манифест содержит:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

В моей невиновности я ожидал, что на получение блокировки экрана будет уходить сразу, но ничего получилось. Более ранние сообщения, которые я прочитал, никогда, похоже, не преодолели эту проблему, кто-нибудь преуспел? Есть ли что-нибудь еще, что я должен сделать?

+1

Экран не должен немедленно отключиться для частичных блокировок от бодрствования, он должен погаснуть с нормальной скоростью (например, через 30 секунд). Это то, что происходит или экран остается? –

+0

Возможный дубликат [Как заставить Android WakeLock работать?] (Http://stackoverflow.com/questions/2039555/how-to-get-an-android-wakelock-to-work) – t0mm13b

+1

@ t0mm13b, это не дубликат этой проблемы. В лучшем случае все наоборот. – 323go

ответ

2

Блокировка слежения не отключает экран. Обычно, когда экран выключается, ваше приложение приостанавливается, потому что процессор укладывается в режим сна. Если у вас есть PARTIAL_WAKE_LOCK, ваше приложение будет продолжать работать, и процессор будет активен, даже когда экран погаснет (из-за автоматического или ручного сна). Используйте это только в том случае, если вам действительно нужно продолжить обработку данных после выключения экрана. Вы упомянули, что вас беспокоит минимизация использования энергии, приобретение блокировки следа любого рода может привести к истощению мощности. Разумно следовать этому предупреждение от батареи PowerManager docs

устройств будет в значительной степени зависеть от использования этого API. Не приобретайте PowerManager.WakeLocks, если вам действительно не нужны , используйте минимальные уровни и не забудьте освободить их как можно скорее .

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

+0

Благодаря A-C и iagreen, которые предложили что-то, что я могу проверить. – blagdonman

+0

Похоже, я неправильно понял, как будет работать блокировка следа. Да, я хочу, чтобы процессор работал, когда экран гаснет, чтобы приложение могло реагировать на пользователя, встряхивающего устройство. – blagdonman

+0

Как вы и A - C ожидаете, экран действительно выключается (тайм-аут). Затем устройство должно быть включено, а экран блокировки очищен до того, как приложение сможет продолжить работу. Никакие «тряски» не были зарегистрированы приложением во время затемнения. Есть несколько вещей, которые я должен попробовать, но у меня такое чувство, что я решаю это неправильно. Я надеялся, что, используя PARTIAL_WAKE_LOCK, я мог бы поддерживать работу процессора и все еще реагировать на акселерометр, даже когда экран блокировки находится на своем месте. Тщетная надежда. – blagdonman

3

Было бы более эффективным, по-другому, чтобы использовать это в onCreate метод деятельности:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

Это лучший способ, чтобы использовать Wake-замки в эффективной манере.

+2

** Не забудьте очистить флаги ** в методе 'onDestroy()'. – Flawyte

+0

OP не хотел знать, как держать экран включенным, а скорее как отключить его. Правильный ответ, неправильный вопрос. – 323go

+0

@miNde Я не думаю, что в этом есть необходимость, так как Android управляет этим автоматически, когда активность уничтожается.Время выполнения Android обрабатывает блокировку, когда приложение находится на переднем плане, обрабатывается wakelock, в противном случае среда выполнения автоматически блокирует блокировку, если не находится на переднем плане или не уничтожается! :) – t0mm13b

 Смежные вопросы

  • Нет связанных вопросов^_^