Android - Wakelock тема не включает экран
У меня проблемы с вейк-замками. По сути, у меня был wakelock, запущенный в моем потоке таймера, doInBackground AsyncTask на протяжении всего времени моего приложения (это фоновое приложение для измерения производительности). Затем я решил, что экран должен включаться каждые 10 минут или около того. Поэтому я создал еще один класс, расширяющий AsyncTask, и поместил приведенный ниже код в его doInBackground, но теперь экран не включается снова. Я должен отметить, что я запускаю этот поток и два других потока, которые являются AsyncTask с методами doInBackground из onCreate.
Вот мой новый внутренний класс, выполняющий пробуждение: в сущности, все, что он должен делать, это разбудить экран телефона каждые 10 минут, пока мои два других фоновых потока не установят свои логические значения true.
private class WakeUp extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
do{
try {
Thread.sleep(WAKEUP_EVERY); //600000ms
} catch (InterruptedException e) {
e.printStackTrace();
}
wl.acquire();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
wl.release();
}while(!timeCompleted || !transferCompleted);
return null;
}
}
1 ответ
Вы забыли сообщить блокировке после включения экрана, используя флаг ACQUIRE_CAUSES_WAKEUP. Согласно документации:
Нормальные пробужденные замки фактически не включают освещение. Вместо этого они приводят к тому, что освещение остается включенным после его включения (например, из-за активности пользователя). Этот флаг заставит экран и / или клавиатуру немедленно включиться, когда будет получен WakeLock. Типичное использование было бы для уведомлений, которые важны для пользователя, чтобы видеть немедленно.
Смотрите ACQUIRE_CAUSES_WAKEUP для более подробной информации:D