Android - Wakelock线程没有打开屏幕

时间:2011-02-19 05:51:16

标签: android multithreading sleep wakelock

我遇到唤醒锁问题。基本上,我在我的计时器线程中运行了唤醒锁,在我的应用程序的整个持续时间内都是AsyncTask的doInBackground(它是用于进行性能测量的后台应用程序)。然后我决定我只想让屏幕每10分钟左右醒来一会儿左右。所以我创建了另一个扩展AsyncTask的类,并将下面的代码放入它的doInBackground中,但现在屏幕没有重新打开。我应该注意,我使用onCreate中的doInBackground方法启动此线程和另外两个AsyncTask线程。

这是我的新内部课程正在醒来:基本上它应该做的是每10分钟唤醒一次电话屏幕,直到我的其他两个背景线程将他们的布尔设置为真。

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 个答案:

答案 0 :(得分:2)

你忘了告诉唤醒锁使用ACQUIRE_CAUSES_WAKEUP标志打开屏幕。根据文件:

  

普通唤醒锁实际上并没有打开照明。相反,它们一旦打开(例如来自用户活动)就使照明保持打开。获取WakeLock时,此标志将强制屏幕和/或键盘立即打开。典型的用途是用于对用户立即查看非常重要的通知。

有关详细信息,请参阅ACQUIRE_CAUSES_WAKEUP:D