2015-03-11 21 views
20

Ich habe einen Dienst, der im Hintergrund ausgeführt werden sollte. Es startet, wenn meine App geöffnet ist und endet, wenn meine App vom Benutzer ausgeschaltet wird.WakeLock abgeschlossen, während immer noch Fehler gehalten, obwohl ich es freigeben

Immer, wenn sich meine App im Hintergrund befindet oder wenn der Bildschirm ausgeschaltet ist, muss der Dienst weiterhin ausgeführt werden.

Ich erreichte dies mit einem WakeLock, aber aus irgendeinem Grund bekomme ich den Fehler im Titel.

Dies ist wegen, weil ich Speicher sein könnte, leckt das WakeLock (wenn ich richtig verstehe).

Ich kann den Fehler durch einen Neustart meiner App auslösen. Hier

ist der entsprechende Code:

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

} 

ich perplex bin, weil in meinem onDestroy() ich die WakeLock veröffentlichen. Ich bin mir nicht sicher, was den Fehler auslöst.

+1

Ich habe auch das gleiche Problem. Also, hast du irgendeine Lösung gefunden? –

+1

Haben Sie versucht, die Erstellung der Sperre auf 'onCreate()' zu verschieben? – iosdude

+0

@iosdude Ich habe es versucht, aber es ist das gleiche. – Pitel

Antwort

6

Service.onStartCommand() kann mehrmals vor Service.onDestroy() aufgerufen werden, da sie nicht "entgegengesetzte" Ereignisse/Zustände darstellen (siehe docs). Sie können mehrere Sperren erwerben (und jedes Mal den Verweis auf die zuvor erlangte Sperre verlieren), aber wenn der Dienst beendet ist/App schließt, geben Sie nur die letzte frei.

+0

Aber was ich bekomme den Wakelock in 'OnCreate()' Methode? Das mache ich, aber immer noch den Fehler. – Pitel

+0

@Pitel, können Sie Ihren Code posten? (obwohl Sie möglicherweise eine neue Frage erstellen müssen, da es wahrscheinlich ein verwandtes, aber anderes Problem ist) –

+0

Hier ist mein Code: http://pastebin.com/zQTBuvaw – Pitel