Android WakeLock已释放,但应用程序仍保持CPU“唤醒”

Android WakeLock已释放,但应用程序仍保持CPU“唤醒”,android,power-management,wakelock,android-wake-lock,Android,Power Management,Wakelock,Android Wake Lock,我有一个在后台读取传感器数据的服务,在读取数据之前,我需要让CPU保持清醒一段时间 在服务的onCreate方法中,我创建了一个新的WakeLock,如下所示: PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); 在onStartCommand方法中,

我有一个在后台读取传感器数据的服务,在读取数据之前,我需要让CPU保持清醒一段时间

在服务的onCreate方法中,我创建了一个新的WakeLock,如下所示:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
在onStartCommand方法中,我按如下方式获取锁:

if(!mWakeLock.isHeld())
    mWakeLock.acquire();
在onDestory方法中,我通过以下方式发布它:

if(mWakeLock.isHeld()) {
    mWakeLock.release();
    Log.i("", "Wakelock released");
}
当服务被破坏时,我会收到我在onDestroy Wakelock released中提供的日志消息。然而,应用程序会让CPU保持数小时的清醒状态。这是我从电池统计中得到的信息。你可以看到,CPU保持清醒超过7个小时,疯狂地耗尽电池电量


有谁能告诉我问题是什么,我如何防止应用程序即使在锁被释放后也无法使CPU休眠

您可以使用adb shell dumpsys power检查您的应用程序是否仍然具有WakeLock,并确保WakeLock已正确释放。嗯,它确实显示我的应用程序持有锁。好吧,我再检查一遍我的代码。谢谢搜索已释放的Wakelock;在查看Commonware时,他将解锁放在一个finally-in-onHandle意图中——也许onDestroy并不总是运行?你检查一下!mWakeLock.ishelld,这似乎阻止重新需要锁,但如果它是另一个锁呢?不知道onDestroy是否在服务实例销毁时被调用-从未完全了解服务类实例的情况。尝试一个静态锁?