2014-10-15 31 views
52

Birisi tam olarak BroadcastReceiver ve WakefulBroadcastReceiver arasındaki fark nedir açıklayabilir misiniz?BroadcastReceiver Vs WakefulBroadcastReceiver

Her bir Receiver sınıfını hangi durumlarda kullanmak zorundayız?

+0

belgeleri okuyun! WAKE_LOCKs – Selvin

+0

hakkında her şeye şüphemden aşağı oylama nedenini biliyor olabilirsiniz. – user2107111

+4

Yanıt (sorunuz için, downvote değil) okunmuştur .. [BroadcastReceiver] (http://developer.android.com/reference/android/content/BroadcastReceiver.html) 'i okuyunuz. Daha sonra okuyun [WakefulBroadcastReceiver] (https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html), [kesinlikle wakefulbroadcast'e ihtiyacınız var ...] (http://porcupineprogrammer.blogspot.in/2014/02 /when-do-you-absolutely-need.html) yardımcı olur. Else ... bu soru için yer değil, lütfen okuyun: [Hangi konular hakkında sorabilirim] (http://stackoverflow.com/help/on-topic) – user2450263

cevap

96

BroadcastReceiver ve WakefulBroadcastReceiver arasında yalnızca bir fark vardır.

Eğer onReceive() yönteminin içine yayını alan

, varsayalım

,

BroadcastReceiver:

  • Size bazı başlatmak eğer CPU uyanık kalacak garanti edilir uzun süren işlem. CPU hemen uykuya geçebilir. WakefulBroadcastReceiver

:

  • O Eğer completeWakefulIntent ateş kadar CPU uyanık kalacak olduğu garanti edilir.

Örnek: yayını aldığınızda

İşte

, sen, bir hizmeti başlıyor sen WakefulBroadcastReceiver kullandığınız olarak, bu wakelock yapacak ve hizmete iç işi bitene kadar CPU uyku izin vermez ve yangın completeWakefulIntent

Kodu:

public class SimpleWakefulReceiver extends WakefulBroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // This is the Intent to deliver to our service. 
     Intent service = new Intent(context, SimpleWakefulService.class); 

     // Start the service, keeping the device awake while it is launching. 
     Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime()); 
     startWakefulService(context, service); 
    } 
} 

class SimpleWakefulService extends IntentService { 
    public SimpleWakefulService() { 
     super("SimpleWakefulService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     // At this point SimpleWakefulReceiver is still holding a wake lock 
     // for us. We can do whatever we need to here and then tell it that 
     // it can release the wakelock. This sample just does some slow work, 
     // but more complicated implementations could take their own wake 
     // lock here before releasing the receiver's. 
     // 
     // Note that when using this approach you should be aware that if your 
     // service gets killed and restarted while in the middle of such work 
     // (so the Intent gets re-delivered to perform the work again), it will 
     // at that point no longer be holding a wake lock since we are depending 
     // on SimpleWakefulReceiver to that for us. If this is a concern, you can 
     // acquire a separate wake lock here. 
     for (int i=0; i<5; i++) { 
      Log.i("SimpleWakefulReceiver", "Running service " + (i+1) 
        + "/5 @ " + SystemClock.elapsedRealtime()); 
      try { 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
      } 
     } 
     Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime()); 
     SimpleWakefulReceiver.completeWakefulIntent(intent); 
    } 
} 
+0

Merhaba. "CPU uyumaya devam edersiniz" ifadesiyle neyi kastediyorsunuz, bir örnek verebilirseniz yararlı olacaktır. Teşekkürler. –

+5

@TheHunter: cep telefonu CPU'daki tüm işlemleri (Merkezi İşlem Birimi) çalıştırır. Bilgisayarlar Intel i3, i5 vb gibi CPU'lara sahiptir ve cep telefonları da CPU gibi snapdragon'a sahiptir. Enerji tasarrufu sağlamak için, cep telefonu ideal hale geldiğinde, kullanıcı etkileşmiyor, ekran ışıkları kapanıyor ve CPU, işleri işlemek yerine ideal (uyku) modda gidebilir. –

+1

@MehulJoisar, bir hizmet başlattığımızda her zaman bir uyandırma alıyoruz? Çünkü bu durumda da uyuyabilir mi? Neden sadece BroadcastReceivers durumunda? – Diffy

İlgili konular