2012-02-03 20 views
5

Hay dos maneras de hacer que un receptor de difusión sea conocido por el sistema: uno lo declara en el archivo de manifiesto con este elemento. El otro es crear el receptor dinámicamente en código java.¿El receptor de difusión de batería declarado en el archivo de manifiesto no funciona?

Ahora, el receptor ha sido creado dinámicamente en código Java y funciona normalmente. Pero ¿por qué falló la primera manera de "Declarar en el archivo de manifiesto"?

¿Hay alguien para el éxito?

Gracias.

AndroidManifest.xml

<receiver android:name="pj.batteryinfo.BatteryReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BATTERY_CHANGED"></action> 
    </intent-filter> 
</receiver> 

Respuesta

4

Para algunas acciones, sólo se podía declarar la BroadcastReceiver en código Java. Esto sucede con la acción BATTERY_CHANGED y SCREEN_ON, SCREEN_OFF hasta donde yo sé.

Cuando declara un BroadcastReceiver en el archivo Manifest.xml, sin importar si su aplicación se está ejecutando o no, el BroadcastReceiver se activará y, por lo tanto, se llamará al método onReceive.

¿Por qué? Creo que es porque la acción BATTERY_CHANGED es muy común y si puede declararlo en el Manifiesto, el sistema a menudo enviará una gran cantidad de emisiones y, por lo tanto, consume la batería de forma espectacular. en el código, el broadcastReceiver solo será efectivo cuando la actividad se esté ejecutando y, por lo tanto, evitará el consumo extremo de la batería. Para ahorrar batería, Android no permite que tales acciones se registren en el archivo.

Esto es solo mi suposición. No vi ninguna explicación oficial sobre esto. Como desarrollador, simplemente memorizo ​​tales acciones, en lugar de las razones detrás de ellas.

+1

Oh .. Me gustaría saber 'POR QUÉ'. ¡Gracias por responder! – Sodino

Cuestiones relacionadas