2014-10-15 24 views
52

Czy ktoś może wyjaśnić, jaka jest różnica między BroadcastReceiver i WakefulBroadcastReceiver?BroadcastReceiver Vs WakefulBroadcastReceiver

W jakich sytuacjach będziemy musieli korzystać z każdej klasy Odbiornika?

+0

przeczytać dokumentację! chodzi tylko o WAKE_LOCKs – Selvin

+0

czy znam przyczynę nieudanego głosowania na moje wątpliwości. – user2107111

+4

Odpowiedź (na twoje pytanie, nie na głosowanie) jest czytana .. Przeczytaj [BroadcastReceiver] (http://developer.android.com/reference/android/content/BroadcastReceiver.html), po tym .. przeczytaj [WakefulBroadcastReceiver] (https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html), [kiedy absolutnie potrzebujesz usługi wakefulbroadcast ...] (http://porcupineprogrammer.blogspot.in/2014/02 /when-do-you-absolutely-need.html) pomogłoby. Else ... to nie jest miejsce na twoje pytanie, przeczytaj: [o czym mogę pytać] (http://stackoverflow.com/help/on-topic) – user2450263

Odpowiedz

96

Istnieje tylko jedna różnica między BroadcastReceiver i WakefulBroadcastReceiver.

Po odebraniu transmisji wewnątrz onReceive() metodzie

Załóżmy,

BroadcastReceiver:

  • Jest nie gwarantuje że CPU zasnąć jeśli zainicjować niektóre długotrwały proces. Procesor może natychmiast powrócić do trybu uśpienia.

WakefulBroadcastReceiver:

  • Jest gwarantowana że CPU zasnąć aż ogień completeWakefulIntent.

Przykład:

Tutaj, po odebraniu transmisji, zaczynają usługi, jak używasz WakefulBroadcastReceiver będzie trzymać wakelock i nie pozwolę snu procesora aż do zakończenia prac w obrębie serwisu i ogień completeWakefulIntent

Kod:

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

Witam. Czy możesz wyjaśnić, co masz na myśli mówiąc "CPU spać" w kategoriach laika i jeśli możesz dać przykład, będzie to pomocne. Dzięki. –

+5

@TheHunter: telefon komórkowy uruchamia wszystkie procesy w CPU (Central Processing Unit). Komputery mają procesor taki jak Intel i3, i5 itp., A telefony komórkowe również mają procesor jak snapdragon. Aby oszczędzać energię, gdy telefon staje się idealny, użytkownik nie wchodzi w interakcje, światła wyświetlacza wyłączają się, a procesor może przejść w idealny tryb (uśpienia) zamiast przetwarzania rzeczy. –

+1

@MehulJoisar, a następnie czy możemy nabrać wakelock za każdym razem, gdy rozpoczynamy usługę? Bo czy w takim razie może iść spać? Dlaczego tylko w przypadku BroadcastReceivers? – Diffy