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): RICEVUTOQuesto 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