即使我释放它,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。 我不确定是什么触发了错误。

  • 在Android上关闭屏幕
  • “PowerManger.FULL_WAKE_LOCK已弃用”是什么意思?
  • 服务,WakeLock
  • 如何使Android设备持有到Internet的TCP连接而无需唤醒locking?
  • 即使我正在发布它,WakeLock仍然保持错误
  • Android - 在不触发睡眠/locking屏幕的情况下closures显示屏 - 使用触摸屏开启
  • AlarmManager并不总是执行BroadcastReceiver
  • WakeLock在仍然举行时最终确定
  • Service.onStartCommand()可以在Service.onDestroy()之前多次调用,因为它们不代表“相反的”事件/状态(请参阅文档 )。 您可能会获得多个锁(并且每次都失去对之前获取的锁的引用),但是当服务完成时/应用程序closures时,只会释放最后一个锁。