gpt4 book ai didi

android - 必须始终到达每个 WakeLock.release() 调用吗?安卓 Lint 警告

转载 作者:太空狗 更新时间:2023-10-29 16:34:54 26 4
gpt4 key购买 nike

Android lint 对以下 [Wakelock] 发出警告:

public static void acquire(Context ctx, long timeout) {
if (wakeLock != null) {
wakeLock.release();
}

PowerManager powerManager
= (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.ON_AFTER_RELEASE,
Common.TAG);
wakeLock.setReferenceCounted(false);

if ( timeout <= 0 ) {
wakeLock.acquire();
} else {
wakeLock.acquire(timeout);
}
}

public static synchronized void release() {
if ( wakeLock != null ) {
if ( wakeLock.isHeld() ) {
wakeLock.release();
}
wakeLock = null;
}
}

第一次出现时给出警告

[lint] [...]/WakeLocker.java: Warning: The release() call is not always reached [Wakelock]

然而,它并不是真的需要每次都释放,因为有超时。

将其包装在 try-catch block 中的默认解决方案,例如 android-wakelock-not-released-after-getactivenetworkinfo ,或在 @rainash's answer below , 不解决导致使用这种方法的问题,即 that the device can go back to sleep .

这是如何解决的?还是应该忽略它?

最佳答案

使用 try-catch block 包装你在设备唤醒时执行的任务

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
final WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "tag");
wakeLock.acquire();
try {
do something
} finally {
wakeLock.release();
}
});

关于android - 必须始终到达每个 WakeLock.release() 调用吗?安卓 Lint 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31247526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com