Qualcuno può spiegare qual è la differenza esatta tra BroadcastReceiver
e WakefulBroadcastReceiver
?BroadcastReceiver Vs WakefulBroadcastReceiver
In quali situazioni dovremmo utilizzare ciascuna classe di ricevitore?
Qualcuno può spiegare qual è la differenza esatta tra BroadcastReceiver
e WakefulBroadcastReceiver
?BroadcastReceiver Vs WakefulBroadcastReceiver
In quali situazioni dovremmo utilizzare ciascuna classe di ricevitore?
C'è solo una differenza tra BroadcastReceiver
e WakefulBroadcastReceiver
.
Quando si riceve la trasmissione all'interno onReceive()
metodo,
Supponiamo,
BroadcastReceiver:
WakefulBroadcastReceiver:
completeWakefulIntent
.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);
}
}
Ciao. Puoi approfondire cosa intendi per "CPU che va a dormire" in parole povere e se puoi dare un esempio sarà utile. Grazie. –
@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. –
@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
leggere la documentazione! è tutto su WAKE_LOCKs – Selvin
potrei sapere il motivo per cui ho votato per il mio voto. – user2107111
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