即使有超时参数也会卡住部分唤醒锁

时间:2018-07-04 15:26:29

标签: android wakelock

我的唤醒锁有问题,超时后仍未释放。

此唤醒锁仅在一个地方获取,我们将超时= 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收集此数据)。任何想法如何发生?

0 个答案:

没有答案