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