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 instanciar un objeto grande Activity
para simplemente haber instanciado una instancia de receptor?BroadcastReceiver como clase interna
Respuesta
... porque el sistema tendría que instanciar un objeto Activity grande para simplemente haber instalado una instancia recevier?
Yup, 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, instanciando 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 de forma 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á utilizando un receptor como parte de una actividad, puede crear instancias manualmente de un receptor de difusión en la actividad (mientras tiene una de las devoluciones de actividad, tiene una instancia de la clase externa para trabajar con : this
) y luego registrar/anular el registro de la forma apropiada:
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);
}
...
}
- 1. Convertidor de unión como clase interna?
- 2. clase Anotar con clase interna
- 3. Instantiating una clase interna
- 4. clase interna en AS
- 5. probando una clase interna
- 6. Anotar clase interna anónima
- 7. ¿Hay algo así como una clase interna en Java?
- 8. Paquete de compatibilidad de Android Fragmento como clase estática interna
- 9. Pregunta sobre C++ clase interna
- 10. Java clase interna rompecabezas visibilidad
- 11. Clase interna privada sintetiza clase anónima inesperada
- 12. La subclasificación clase interna de la clase externa versus otra clase interna
- 13. Clase estática interna en Java
- 14. Java: estático vs clase interna
- 15. clase interna que se extiende
- 16. AspectJ Clase interna Unir puntos
- 17. Serialización de clase interna estática
- 18. ¿Propósito de una clase interna?
- 19. Inicializador estático en una clase interna?
- 20. Instanciando clase interna con constructor privado
- 21. clase interna y externa de clase en C#
- 22. Clase de actividad interna anidada en Android
- 23. java.lang.NoClassDefFoundError: en la clase interna anónima
- 24. Lista JAXB Tag creación clase interna
- 25. Referencia de clase para una clase interna Java
- 26. ¿Cómo reenvío declarar una clase interna?
- 27. ¿Cómo se usa getApplicationContext en la clase BroadcastReceiver?
- 28. Clase interna en la interfaz vs en la clase
- 29. Servicio y BroadCastReceiver
- 30. Una clase interna retorcida en Java
he tratado de utilizar una clase interna como usted sugiere (y también como vi en algunos ejemplos en línea): https://gist.github.com/daviddoria/80c9c5dc98913b54bf00 pero no se llama aRecepción cuando giro mi dispositivo. ¿Alguna sugerencia? –
bert ¿Esto conduce a cualquier pérdida de memoria al mantener el objeto de la clase externa? –