我在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()。当我按下退出按钮,然后让手机进入睡眠状态时,我希望我的程序无法正常工作,但它的工作原理显示我没有释放锁定
答案 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;
}