android - WakeLock 已完成,但仍然存在错误,即使我正在释放它

标签 android android-service wakelock android-wake-lock

我有一个应该在后台运行的服务。它在我的应用程序打开时开始,并在我的应用程序被用户关闭时结束。

每当我的应用在后台或屏幕关闭时,我仍然需要运行该服务。

我通过 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() 中我释放了 WakeLock。我不确定是什么触发了错误。

最佳答案

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

关于android - WakeLock 已完成,但仍然存在错误,即使我正在释放它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28984662/

相关文章:

android-service - 如何从 Activity 调用 mediaBrowserService 中的 getDuration?

android - 当屏幕在 Android 中被阻止时?

android - 错误:使用OneDrive SDK时找不到方法repository()

android - Phonegap 条码扫描仪纵向模式

android - 从应用程序启动启动服务,而不是 Activity

屏幕锁定时 Android 收不到位置更新

屏幕关闭时 Android Wakelock 不工作

android - HttpUrlConnection.getInputStream 在 Android 中返回空流

java - 无法从服务调用共享首选项

android - 在android中使用MVP模式时,android服务调用和对GoogleAPIClient的调用应该写在哪里?