即使我正在释放它,WakeLock仍然保持错误但最终确定

Dav*_*vid 20 android android-service android-wake-lock wakelock

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

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

我用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();
    }

}
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为onDestroy()我发布了WakeLock.我不确定是什么触发了这个错误.

小智 6

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