BroadcastReceiver como clase interna

Sé que BroadcastReceiver no se puede usar si se define como clase interna de la actividad. Pero me pregunto por qué? ¿Es porque el sistema tendría que crear una instancia de un objeto de Activity grande para simplemente haber instanciado una instancia de receptor?

    … porque el sistema tendría que crear una instancia de un objeto de actividad grande para simplemente haber instalado una instancia de recevier?

    Sí, al igual que cualquier otra clase interna no estática. Tiene que obtener una instancia de la clase externa desde algún lugar (por ejemplo, creando instancias o mediante algún otro mecanismo) antes de que pueda crear instancias de la clase interna (no estática).

    Los receptores de difusión global que se invocan desde intenciones en el archivo de manifiesto que el sistema debería crear una instancia automática no tienen esa instancia externa para crear una instancia de la clase interna no estática del receptor de difusión. Esto es independiente de lo que es la clase externa, Actividad o no.

    Sin embargo, si está usando un receptor como parte de trabajar con una actividad, puede instanciar manualmente un receptor de difusión en la actividad (mientras que una de las devoluciones de actividad tiene una instancia de la clase externa con la que trabajar: this ) y luego registrar / anular el registro según corresponda:

     public class MyActivity extends Activity { private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(...) { ... } }); ... public void onResume() { super.onResume(); .... registerReceiver(myBroadcastReceiver, intentFilter); } public void onPause() { super.onPause(); ... unregisterReceiver(myBroadcastReceiver); } ... }