我想要一个计时器,但我发现当设备进入睡眠状态时它不起作用。我用过AlarmManager
,但它不起作用。我还尝试了服务,但仍然没有帮助。然后我尝试WakeLock
使用partial_wake_lock
. 一开始它运行良好,但在没有更改任何与 PowerManager 或 WakeLock 相关的代码的情况下突然失败。现在它将工作大约 1.5 分钟。
代码是:
private void acquireWakeLock(){
PowerManager pm=(PowerManager)getSystemService(Context.POWER_SERVICE);
wl=pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getCanonicalName());
wl.acquire();
}
private void releaseWakeLock(){
if(wl!=null&&wl.isHeld()){
wl.release();
wl=null;
}
}
正如你所看到的,没有什么特别的。基本上我是这样做的:
//private members,including a wakelock,a handler and a runnable, etc
onCreate{
acquireWakeLock();
init();
handler.postdelayed(runnable,time);
}
//some functions...
a function //called in runnable, which does all work before finish() and it calls releaseWakeLock()
我在Activity中调用了获取函数,onCreate
所有工作完成后释放。调试时我可以看到锁已经被持有,但是当没有插入时,它在 1.5 分钟后不会做任何工作。
我怎样才能让它工作,或者是否有任何解决方案可以很好地代替这个愚蠢的唤醒锁?------更新----- 我已经获得了我需要的所有权限,正如我所提到的,在调用获取函数后,WakeLock 已经被持有,并且可以在 Watch 中看到。