1

我得到了onCreate方法中的唤醒锁,它工作正常(我还设置了权限):

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Wake lock");
wl.acquire();

但是,当我尝试像这样发布它时:

@Override
protected void onDestroy() 
{
    super.onDestroy();
    wl.release();
}

由于某种原因它没有被释放。这怎么可能 ?有任何想法吗 ?

编辑:我有一个退出按钮,它调用完成(),然后调用 onDestroy()。当我按下退出按钮然后让手机进入睡眠状态时,我希望我的程序无法运行,但它可以运行,这表明我的锁没有被释放

4

3 回答 3

5

确定您的WakeLock-release 代码是否有效的正确方法是adb shell dumpsys power在发布之前和之后使用 ,查看您的代码是否WakeLock已发布。由于其他应用程序可以随时请求和获取WakeLocks,因此其他随意检查(例如,我的应用程序是否在屏幕关闭时运行?)将是不可靠的。

于 2013-01-16T16:31:42.527 回答
1

release()将代码更改onPause()为 Activity。根据Android文档,解释了调用Activity的acquire()onResume()并释放Activity的wakelock onPause()。在您的情况下,您正在使 Activity 休眠但不破坏它,因此它不会释放唤醒锁。所以把它移到onPause().

于 2013-01-16T15:37:08.163 回答
1

这是我的解决方案。你可以使用isHeld()函数来做到这一点

 if (wl!= null && wl.isHeld()) {
    wl.release();
    wl= null;
 }
于 2016-10-24T12:21:21.547 回答