Wakelock可以自动释放吗?

时间:2011-09-30 08:43:43

标签: android

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

我做错了吗?唤醒锁是否会在某个时刻自动释放?

有更正确的方法吗?

1 个答案:

答案 0 :(得分:0)

你得到什么错误?

假设您的服务不是严格“一次性”,您应该在同一服务实例上多次调用onStartCommand - 从而创建了许多唤醒锁。不要那样做。

首先将WakeLock的创建移至Service#onCreate() - 您只需要一个。{如果您希望设备保持唤醒状态,直到您“手动”终止服务,我建议您WakeLock#aquire() Service#onCreate(),而不是多次调用它。

如果你坚持要WakeLock#aquire() Service#onStartCommand(),你需要跟踪你调用它的次数(因为默认情况下是引用计数) - 或转向引用计数在WakeLock上通过调用WakeLock#setReferenceCounted(false)创建它时。{/ p>