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: 警告:release()调用并不总是被执行到 [Wakelock]
然而,它并不真正需要每次都被释放,因为有一个超时时间。
默认的解决方案是将其包装在一个 try-catch
块中,例如在 android-wakelock-not-released-after-getactivenetworkinfo 或者在下面 @rainash 的回答 中,但这并没有解决使用这种方法所遇到的问题,即设备可能会重新进入睡眠状态。
如何解决这个问题?还是应该忽略它?