Android - Wakelock тема не включает экран - PullRequest
1 голос
/ 19 февраля 2011

У меня проблемы с вейк-замками.По сути, у меня был 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 Ответ

2 голосов
/ 28 июня 2011

Вы забыли сообщить блокировке после включения экрана, используя флаг ACQUIRE_CAUSES_WAKEUP.В соответствии с документацией:

Нормальные пробужденные замки фактически не включают освещение.Вместо этого они приводят к тому, что освещение остается включенным после его включения (например, из-за активности пользователя).Этот флаг заставит экран и / или клавиатуру немедленно включиться, когда будет получен WakeLock.Типичное использование было бы для уведомлений, которые важны для немедленного просмотра пользователем.

См. ACQUIRE_CAUSES_WAKEUP для получения дополнительной информации: D

...