2015-03-11 24 views
20

Arka planda çalıştırılması gereken bir hizmetim var. Uygulamam açıkken başlar ve uygulamam kullanıcı tarafından kapatıldığında sona erer.WakeLock, hala bıraktığım halde hata devam ederken

Uygulamam arka planda olduğunda veya ekran kapatıldığında, yine de çalışmaya devam etmem gerekiyor.

Bunu bir WakeLock ile başardım, ancak bir nedenle başlığında hatayı alıyorum.

Bu, WakeLock'tan sızan bellek olabileceğinden (doğru anlıyorsam) ilgili.

Uygulamamı yeniden başlatarak hatayı tetikleyebilirim.

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

} 

benim onDestroy() I Uyandırma kilidi serbest çünkü şaşkın değilim:

İşte alakalı kodudur. Hatayı neyin tetiklediğinden emin değilim. onlar 'zıt' etkinlikleri/durumlarını (docs bakınız) temsil etmediği için

+1

Aynı sorunla da karşı karşıyayım. Yani, herhangi bir çözüm buldunuz? –

+1

Kilidin oluşturulmasını 'onCreate()' konumuna taşımayı denediniz mi? – iosdude

+0

@iosdude Denedim, ama aynı. – Pitel

cevap

6

Service.onStartCommand(), Service.onDestroy() önce birkaç kez çağrılabilir. Birden fazla kilit (ve her defasında önceki edinilen kilitle referansı kaybetme) alabilirsiniz, ancak hizmetiniz bittiğinde/uygulama kapanıyorsa, yalnızca sonuncuyu bırakıyorsunuz demektir.

+0

Ama OnCreate() 'yönteminde wakelock ne alıyorum? Yaptığım şey bu, ama yine de hatayı alıyorum. – Pitel

+0

@Pitel, kodunuzu gönderir misiniz? (Her ne kadar yeni bir soru oluşturmaya gereksiniminiz olsa da, muhtemelen ilgili ama farklı bir problem olduğu için) –

+0

İşte kodum: http://pastebin.com/zQTBuvaw – Pitel