2014-10-15 13 views
52

Qualcuno può spiegare qual è la differenza esatta tra BroadcastReceiver e WakefulBroadcastReceiver?BroadcastReceiver Vs WakefulBroadcastReceiver

In quali situazioni dovremmo utilizzare ciascuna classe di ricevitore?

+0

leggere la documentazione! è tutto su WAKE_LOCKs – Selvin

+0

potrei sapere il motivo per cui ho votato per il mio voto. – user2107111

+4

La risposta (per la tua domanda, non downvote) viene letta .. Leggi [BroadcastReceiver] (http://developer.android.com/reference/android/content/BroadcastReceiver.html), dopo quello .. leggi [WakefulBroadcastReceiver] (https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html), [quando è assolutamente necessario wakefulbroadcast ...] (http://porcupineprogrammer.blogspot.in/2014/02 /when-do-you-absolutely-need.html) aiuterebbe. Altrimenti ... questo non è il posto per la tua domanda, per favore leggi: [quali argomenti posso chiederti] (http://stackoverflow.com/help/on-topic) – user2450263

risposta

96

C'è solo una differenza tra BroadcastReceiver e WakefulBroadcastReceiver.

Quando si riceve la trasmissione all'interno onReceive() metodo,

Supponiamo,

BroadcastReceiver:

  • non è garantito che CPU rimanere sveglio se si avvia un po ' processo di lunga durata. La CPU potrebbe tornare immediatamente a dormire.

WakefulBroadcastReceiver:

  • E 'garantito che CPU rimanere svegli fino a quando il fuococompleteWakefulIntent.

Esempio:

Qui, quando si riceve la trasmissione, si avvia un servizio, come si sta utilizzando WakefulBroadcastReceiver, si terrà wakelock e non permetterà che il sonno della CPU fino al completamento del lavoro all'interno del servizio e fuoco completeWakefulIntent

Codice:

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

Ciao. Puoi approfondire cosa intendi per "CPU che va a dormire" in parole povere e se puoi dare un esempio sarà utile. Grazie. –

+5

@TheHunter: cellphone esegue tutti i processi nella CPU (Central Processing Unit). I computer hanno la CPU come Intel i3, i5 ecc. E anche i cellulari hanno la CPU come la bocca di leone. Per risparmiare energia, ogni volta che il cellulare diventa l'ideale, l'utente non interagisce, il display si spegne e la CPU può andare in modalità ideale (sleep) invece di elaborare le cose. –

+1

@MehulJoisar, quindi compriamo un wakelock ogni volta che iniziamo un servizio? Perché anche in questo caso può andare a dormire? Perché solo in caso di BroadcastReceivers? – Diffy

Problemi correlati