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

Другие вопросы по тегам