2015-03-11 22 views
20

Ho un servizio che dovrebbe essere eseguito in background. Inizia quando la mia app è aperta e termina quando l'app viene disattivata dall'utente.WakeLock finalizzato mentre si continua a contenere errori anche se lo sto rilasciando

Ogni volta che la mia app è in background o quando lo schermo è spento, ho ancora bisogno del servizio in esecuzione.

Ho raggiunto questo con un WakeLock, ma per qualche motivo ottengo l'errore nel titolo.

Ciò è dovuto al fatto che potrebbe esserci una perdita di memoria del WakeLock (se ho capito bene).

Sono in grado di attivare l'errore riavviando la mia app.

Ecco il codice rilevante:

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

} 

Sono perplesso perché nella mia onDestroy() rilascio l'Wakelock. Non sono sicuro di cosa stia provocando l'errore.

+1

Anche io sto affrontando lo stesso problema. Quindi hai trovato qualche soluzione? –

+1

Hai provato a spostare la creazione del blocco su 'onCreate()'? – iosdude

+0

@iosdude Ho provato, ma è lo stesso. – Pitel

risposta

6

Service.onStartCommand() può essere richiamato più volte prima dello Service.onDestroy(), in quanto non rappresentano eventi/stati "opposti" (vedere docs). Puoi acquisire più blocchi (e perdere ogni volta il riferimento al blocco acquisito precedente), ma quando il servizio è finito/l'app si chiude, stai rilasciando solo l'ultimo.

+0

Ma cosa ottengo il wakelock nel metodo 'OnCreate()'? Questo è quello che sto facendo, ma ricevo comunque l'errore. – Pitel

+0

@Pitel, puoi pubblicare il tuo codice? (anche se potrebbe essere necessario creare una nuova domanda, poiché è probabilmente un problema correlato ma diverso) –

+0

Ecco il mio codice: http://pastebin.com/zQTBuvaw – Pitel

Problemi correlati