JavascriptProva

venerdì 8 aprile 2016

Ciclo di vita dei BroadcastReceiver registrati su Manifest

Ed ecco come i BroadcastReceiver si rendono poi indipendenti dall'esecuzione o meno dell'App che li ha lanciati.
Ho creato una nuova applicazione che chiami i due BroadcastReceiver con la stessa Action:
 Intent intent=new Intent();
 intent.setAction("android.intent.action.Seconda");
 sendBroadcast(intent);
e lancio questa nuova applicazione curandomi bene che la prima non fosse più in esecuzione sull'emulatore.
I due BroadcastReceiver, il cui codice è rispettivamente:
public class receiver extends BroadcastReceiver{

 @Override
 public void onReceive(Context context, Intent intent) {
  Log.d("BROADCAST","RICEVUTO");
  
 }

}
...e:
public class receiver2 extends BroadcastReceiver{

 @Override
 public void onReceive(Context context, Intent intent) {
  Log.d("SECONDO BROADCAST", "RICEVUTO");
  
 }

}
vengono eseguiti ugualmente, essendo rimasti attivi sul dispositivo anche dopo la chiusura dell'applicazione nella quale sono stati creati:
04-08 10:35:12.325: D/BROADCAST(2317): RICEVUTO
04-08 10:35:12.353: D/SECONDO BROADCAST(2317): RICEVUTO


Sono andato poi a cambiare il loro codice per fare in modo che lanciassero dei Toast anziché scrivere in Logcat:
public class receiver extends BroadcastReceiver{

 @Override
 public void onReceive(Context context, Intent intent) {
  Toast.makeText(context, "PRIMO BROADCASTRECEIVER", Toast.LENGTH_LONG).show();
  
 }

}
e
public class receiver2 extends BroadcastReceiver{

 @Override
 public void onReceive(Context context, Intent intent) {
  Toast.makeText(context, "SECONDO BROADCASTRECEIVER", Toast.LENGTH_LONG).show();
  
 }

}
ma, rieseguendo il programma, non ottengo nessun Toast, bensì ancora la scrittura in LogCat:
04-08 10:39:56.533: D/BROADCAST(2317): RICEVUTO
04-08 10:39:56.537: D/SECONDO BROADCAST(2317): RICEVUTO

Questo testimonia che una volta registrato sul Manifest un BroadcastReceiver continua a funzionare indipendentemente dall'applicazione che l'ha generato.
E se io provo a eliminare l'apk dell'App che ha generato i BroadcastReceiver?

Fatto! Ho eliminato gli apk di ambedue le applicazioni, quella che ha creato i BroadcastReceiver e quella nuova che li richiamava.
Adesso faccio ripartire la nuova app che li richiamava, e vediamo se li richiama ancora...

Sembrerebbe di no...

Faccio ripartire la prima applicazione... ma stavolta con il codice dei BroadcastReceiver modificato per i Toast anziché per la scrittura in LogCat

Ed ecco cosa succede:





Questo significa che disinstallando dal dispositivo l'App che ha registrato il BroadcastReceiver si de-registra anche esso.
Voglio fare un'altra prova: creo un Intent con un'action immaginaria inesistente fra i BroadcastReceiver, per vedere se ottengo errore o no: dal momento che quando il BroadcastReceiver, nella mia ipotesi, era de-registrato, non ho ottenuto messaggi di errore, non vorrei aver condotto male la prova essendo il BroadcastReceiver comunque esistente dopo la disinstallazione dell'app creante...
  Intent intent=new Intent();
  intent.setAction("android.intent.action.Fasullo");
  sendBroadcast(intent);
No: non ottengo messaggi di errore.
Torno ad eseguire la nuova App con la precedente action:
  Intent intent=new Intent();
  intent.setAction("android.intent.action.Seconda");
  sendBroadcast(intent);
...e ottengo di nuovo i Toast! Credo di poter avere la conferma piena della mia ipotesi.

Nessun commento:

Posta un commento