2011-05-22 14 views
43

Ekran kapandığında, uygulama servisim duraklatıldı.Android hizmetim ekran kapalıyken nasıl çalışabilir?

Aşağıdaki kod ile benim hizmetini başlatmak:

if (mSharedPrefs.getBoolean("prefAutoUpdatesMain", false)) { 
    Intent svc = new Intent(this, MyService.class); 
    startService(svc); 
} 

nasıl hizmet duraklama önleyebilirsiniz olabilir?


MyService'de yapmam gereken bazı verileri Internet'ten indirmektir. Anlıyorum varsa ben takip etmek zorunda süreçtir:

  1. Edinme Uyandırma kilidi
  2. Verileri indir
  3. Yayın Uyandırma kilidi

veri yöntemini Indirirken Uyandırma kilidi için hiçbir başvuru var, öyle wakeLock sahip uygulama, bu doğru mu?

Uyanma kilitleri varsayılan olarak referans olarak sayılmıştır. Ben referans sayımı olmadan bir wakeLock daha iyi olduğunu düşünüyorum, onu bırakmak emin olmak için yanlış mıyım?

cevap

64

Kısmi Uyandırma kilidi istediğiniz şeydir. Ekran kapalı olsa bile CPU açılacaktır.

kazanmak için:

PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE); 
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); 
wakeLock.acquire(); 

serbest bırakmak için:

wakeLock.release(); 

Eğer uyandırma işlevi gerektiren hizmetinde birden şeyler olabilir ve cihaz ne zaman hiçbiri uyuyabilir Uyandırma kilidi de referans sayma destekler bunların aktif. dikkat edilmesi gereken

şeyler: Referans sayım kullanıyorsanız, uygulama üzerinden tüm kontrol yolları düzgün/salınımını satın alacak emin olun

... Sonunda blokları burada kullanışlı. Ayrıca WakeLocks'ı seyrek olarak ve kısa süreler için tuttuğunuzdan emin olun. Pil kullanımı açısından katılıyorlar. Kilitinizi alın, işinizi yapın ve mümkün olan en kısa zamanda bırakın.

1

Sadece bir yönlendirme hizmeti kullanıyorum.

+0

Burada oldukça temiz nifty çözümü gönderdim. Umarım yardımcı olur. http://stackoverflow.com/questions/9029040/how-to-run-an-android-app-in-background/43555050#43555050 – user2288580

İlgili konular