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

}

Я в недоумении, потому что в моем onDestroy() я отпускаю WakeLock. Я не уверен, что вызывает ошибку.


person David    schedule 11.03.2015    source источник
comment
Я тоже сталкиваюсь с той же проблемой. Итак, вы нашли какое-то решение?   -  person Mandeep Rajpal    schedule 11.11.2015
comment
Пробовали ли вы перенести создание блокировки на onCreate()?   -  person iosdude    schedule 16.02.2017
comment
@iosdude Я пытался, но все то же самое.   -  person Pitel    schedule 16.02.2017


Ответы (1)


Service.onStartCommand() можно вызывать несколько раз перед Service.onDestroy(), поскольку они не представляют «противоположные» события/состояния (см. документы< /а>). Вы можете получить несколько блокировок (и каждый раз терять ссылку на предыдущую полученную блокировку), но когда ваша служба завершается / приложение закрывается, вы освобождаете только последнюю.

person Yoni Gross    schedule 13.02.2017
comment
Но что я могу получить wakelock в методе OnCreate()? Это то, что я делаю, но все еще получаю ошибку. - person Pitel; 16.02.2017
comment
@Pitel, можешь опубликовать свой код? (хотя вам может потребоваться создать новый вопрос, так как это, вероятно, связанная, но другая проблема) - person Yoni Gross; 16.02.2017
comment
а у тебя такая же ошибка? WakeLock доработан, пока еще держится? релизы WifiLock в порядке? И это что-то случается редко или постоянно? - person Yoni Gross; 16.02.2017
comment
Да все время. И утверждения проходят, поэтому я думаю, что блокировка снята. - person Pitel; 17.02.2017