Android唤醒锁未发布

时间:2013-01-16 15:28:05

标签: android release wakelock

我在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();
}

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

编辑:我有一个退出按钮,调用finish()然后调用onDestroy()。当我按下退出按钮,然后让手机进入睡眠状态时,我希望我的程序无法正常工作,但它的工作原理显示我没有释放锁定

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这是我的解决方案。您可以使用isHeld()功能来执行此操作

 if ( wl!= null ) {
    if ( wl.isHeld() ) {
        wl.release();
    }
    wl= null;
 }