WakeLock 已完成,但仍然存在错误,即使我正在释放它
WakeLock finalized while still held error even though I'm releasing it
我有一项服务应该在后台 运行。它在我的应用程序打开时开始,并在用户关闭我的应用程序时结束。
每当我的应用程序处于后台或屏幕关闭时,我仍然需要服务 运行ning。
我通过 WakeLock 实现了这一点,但由于某种原因,我在标题中遇到了错误。
这令人担忧,因为我可能会泄漏 WakeLock(如果我理解正确的话)。
我可以通过重新启动我的应用程序来触发错误。
相关代码如下:
public class SomeService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG");
if (!mWakeLock.isHeld()) mWakeLock.acquire();
//Handle other processing
return START_STICKY;
}
@Override
public void onDestroy() {
if (mWakeLock.isHeld()) mWakeLock.release();
super.onDestroy();
}
}
我很困惑,因为在我的 onDestroy()
中我释放了唤醒锁。我不确定是什么触发了错误。
Service.onStartCommand()
可以在Service.onDestroy()
之前多次调用,因为它们不代表'opposite'events/states(见docs)。您可能会获得多个锁(并且每次都会丢失对先前获得的锁的引用),但是当您的服务完成/应用程序关闭时,您只会释放最后一个锁。
我有一项服务应该在后台 运行。它在我的应用程序打开时开始,并在用户关闭我的应用程序时结束。
每当我的应用程序处于后台或屏幕关闭时,我仍然需要服务 运行ning。
我通过 WakeLock 实现了这一点,但由于某种原因,我在标题中遇到了错误。
这令人担忧,因为我可能会泄漏 WakeLock(如果我理解正确的话)。
我可以通过重新启动我的应用程序来触发错误。
相关代码如下:
public class SomeService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG");
if (!mWakeLock.isHeld()) mWakeLock.acquire();
//Handle other processing
return START_STICKY;
}
@Override
public void onDestroy() {
if (mWakeLock.isHeld()) mWakeLock.release();
super.onDestroy();
}
}
我很困惑,因为在我的 onDestroy()
中我释放了唤醒锁。我不确定是什么触发了错误。
Service.onStartCommand()
可以在Service.onDestroy()
之前多次调用,因为它们不代表'opposite'events/states(见docs)。您可能会获得多个锁(并且每次都会丢失对先前获得的锁的引用),但是当您的服务完成/应用程序关闭时,您只会释放最后一个锁。