¿Cuál es la situación cuando el método onrecive en transmisión en Android se ejecuta continuamente en un bucle?
Introducción a BroadCastReceiver (código fuente al final)
El código fuente de BroadCastReceiver se encuentra en: framework/base/core/java/android.content.BroadcastReceiver.java
El receptor de transmisión (BroadcastReceiver) se utiliza para recibir la intención de transmisión. El envío de la intención de transmisión se logra llamando a Context.sendBroadcast() y Context.sendOrderedBroadcast(). Por lo general, varios receptores de transmisión suscritos a este Intent pueden recibir un Intent de transmisión.
La transmisión es un mecanismo ampliamente utilizado para transmitir información entre aplicaciones. BroadcastReceiver es un tipo de componente que filtra, recibe y responde a las transmisiones enviadas;
Proviene de aplicaciones comunes, como una aplicación que notifica a otras aplicaciones que se han descargado ciertos datos.
BroadcastReceiver en sí no implementa una interfaz gráfica de usuario, pero cuando recibe una notificación, BroadcastReceiver puede iniciar una Actividad en respuesta, o recordarle al usuario a través de NotificationMananger, o iniciar un Servicio, etc.
El mecanismo de BroadCastReceiver
1. Mecanismo
Hay varias transmisiones en Android, como el estado de uso de la batería, la recepción del teléfono y la recepción de mensajes de texto. generará una transmisión, y los desarrolladores de aplicaciones también pueden monitorear estas transmisiones y procesar la lógica del programa.
Como se muestra en la figura:
2. Implementación
Utilice la recepción de mensajes de texto como ejemplo:
El primer método:
Implementación
clase pública MyBroadcastReceiver extiende BroadcastReceiver {
// nombre de la acción
String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED" ;
public void onReceive( Contexto contexto, Intención intención) {
if (intent.getAction().equals( SMS_RECEIVED )) {
// Procesamiento relacionado: cambio de región, batería baja , llamadas entrantes y mensajes
}
}
}
Registro del sistema: Regístrese en AndroidManifest.xml
< receptor android: nombre = ".MyBroadcastReceiver"
< intent-filter android:priority = "1000"
< acción android:nombre = " android.provider. Telephony.SMS_RECEIVED" />
intent-filter
receptor > Por supuesto, se requiere permiso:
< uses-permission android:name = "android.permission.RECEIVE_SMS " />
< usa-permiso android:name = "android.permission.SEND_SMS" />
Segundo método:
//Recepción de transmisión - Recepción de transmisión
BroadcastReceiver privado myBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Contexto de contexto, intención de intención) {
@Override
p>
// Procesamiento relacionado, como recibir mensajes de texto y monitorear información de cambios de energía
}
};
Registrado en el código:
IntentFilter intentFilter = new IntentFilter( "android.provider.Telephony.SMS_RECEIVED ");
registerReceiver( mBatteryInfoReceiver , intentFilter);
3. Ciclo de vida
Describe el ciclo de vida de la transmisión en Android. En segundo lugar, no es tan complicado como Activity. El principio operativo es muy simple, como se muestra a continuación. :
El ciclo de vida es solo de unos diez segundos. Si se realizan más de diez segundos dentro de onReceive() Si algo sucede en segundos, se informará un error.
Cada vez que llega una transmisión, el objeto BroadcastReceiver se recreará y se llamará al método onReceive(). Después de la ejecución, el objeto se destruirá cuando el método onReceive() no se ejecute. 10 segundos, Android Se considerará que el programa no responde. Por lo tanto, algunas operaciones que requieren mucho tiempo no se pueden realizar en
BroadcastReceiver; de lo contrario, aparecerá el cuadro de diálogo ANR (Aplicación No
Respuesta). Aparecerá el cuadro.