即使我释放它,WakeLock仍然保持错误状态

我有一个应该在后台运行的服务。 它在我的应用程序打开时启动,并在用户closures应用程序时结束。

每当我的应用程序在后台或屏幕closures,我仍然需要服务运行。

我用WakeLock实现了这个function,但由于某种原因,我在标题中遇到了错误。

这是有关的,因为我可能是内存泄漏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()我释放WakeLock。 我不确定是什么触发了错误。

Solutions Collecting From Web of "即使我释放它,WakeLock仍然保持错误状态"

Service.onStartCommand()可以在Service.onDestroy()之前多次调用,因为它们不代表“相反的”事件/状态(请参阅文档 )。 您可能会获得多个锁(并且每次都失去对之前获取的锁的引用),但是当服务完成时/应用程序closures时,只会释放最后一个锁。