1

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

这是我的新内部类正在唤醒:基本上它应该做的就是每 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;
    }

}
4

1 回答 1

2

您忘记使用 ACQUIRE_CAUSES_WAKEUP 标志告诉唤醒锁打开屏幕。根据文档:

普通唤醒锁实际上不会打开照明。相反,它们会导致照明一旦打开(例如来自用户活动)就保持打开状态。当获取 WakeLock 时,此标志将强制屏幕和/或键盘立即打开。一个典型的用途是通知对用户来说很重要,可以立即看到。

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

于 2011-06-27T20:16:56.733 回答