我在服务的onStartCommand中使用了一个唤醒锁:
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wl.acquire();
我想唤醒唤醒锁,因为我需要随时识别震动事件,即使屏幕已锁定。
当服务启动很长时间并且我将其销毁时,在使用destroy方法获取唤醒锁时会出错:
@Override
public void onDestroy() {
mSensorManager.unregisterListener(mSensorListener);
if(wl.isHeld())
wl.release();
super.onDestroy();
}
我做错了吗?唤醒锁是否会在某个时刻自动释放?
有更正确的方法吗?
答案 0 :(得分:0)
你得到什么错误?
假设您的服务不是严格“一次性”,您应该在同一服务实例上多次调用onStartCommand - 从而创建了许多唤醒锁。不要那样做。
首先将WakeLock
的创建移至Service#onCreate()
- 您只需要一个。{如果您希望设备保持唤醒状态,直到您“手动”终止服务,我建议您WakeLock#aquire()
Service#onCreate()
,而不是多次调用它。
如果你坚持要WakeLock#aquire()
Service#onStartCommand()
,你需要跟踪你调用它的次数(因为默认情况下是引用计数) - 或转向引用计数在WakeLock
上通过调用WakeLock#setReferenceCounted(false)
创建它时。{/ p>