我的唤醒锁有问题,超时后仍未释放。
此唤醒锁仅在一个地方获取,我们将超时= 65秒传递给wakelock.acquire(timeout)
方法,它也受if (!wakelock.isHeld()) {
保护,因此不会被多次获取:
private void acquireLockIfNeeded() {
if (mWakelock == null) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "my-wakelock-tag");
}
if (!mWakelock.isHeld()) {
mWakelock.acquire(65000);
}
}
获取发生在主线程上(我们在后台服务的onStartCommand
回调中将其称为)。另外,我们会在60秒后通过停止服务手动释放此唤醒锁。在onDestroy
回调中,我们有唤醒锁释放代码:
@Override
public void onDestroy() {
super.onDestroy();
if (mWakelock != null && mWakelock.isHeld()) {
mWakelock.release();
mWakelock = null;
}
}
根据Google Play的要点,此唤醒锁在90%的情况下会在1分钟内释放,但第99个百分位表明它在50-60分钟或更长时间内释放。它不是特定于设备的,并且发生在Android 8.0和8.1上(但可能是Google开始仅从oreo收集此数据)。任何想法如何发生?