Подтвердить что ты не робот

WakeLock завершил свою работу, несмотря на то,

У меня есть служба, которая должна выполняться в фоновом режиме. Он начинается, когда мое приложение открыто и заканчивается, когда пользователь отключается от моего приложения.

Всякий раз, когда мое приложение находится в фоновом режиме или когда экран выключен, мне все равно нужна работа.

Я достиг этого с помощью WakeLock, но по какой-то причине я получаю ошибку в названии.

Это связано с тем, что я могу потерять память Wake Wake (если я правильно понимаю).

Я могу вызвать ошибку, перезапустив мое приложение.

Вот соответствующий код:

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. Я не уверен, что вызывает ошибку.

4b9b3361

Ответ 1

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