Quiero acceder a una variable "global" en mi MyApp (extiende la Aplicación) desde un receptor de difusión (registrado en el manifiesto) y p. actividades múltiples Ahora parece que tengo instancias diferentes de mi MyApp: una para el BCR y otra para las actividades. ¿Podría sb ayudarme con mi problema? muchas gracias JoergInstancia diferente de Applicationcontext en Broadcastreceiver
Respuesta
Lo que me sale de esto es que estás tratando de crear un método para tener un único objeto Context. En primer lugar, para hacer esto, necesitaría un patrón Singleton de MyApp para crear su variable "global". Sin embargo, recomendaría esto por estos motivos:
- Los diferentes componentes de la aplicación tienen por defecto diferentes contextos (base, aplicación).
- Un BroadcastReceiver definido en el manifiesto es invocado por el sistema operativo, no por su aplicación.
- El uso de un patrón Singleton para un objeto de contexto dará lugar a algunas dependencias muy desagradables.
- Va en contra del diseño y la belleza de Android Framework.
Sospecho que la razón por la que está haciendo esto es para que su clase MyApp pueda iniciar diferentes actividades. Esto tiene sentido, pero ... puedes obtener un objeto de contexto desde casi cualquier lugar. Muchas cosas en Android extienden la clase ContextWrapper (piense en los objetos de Java con la clase Object). Entonces realmente no hay razón para tener una instancia "global" de esto. De hecho, el método onReceive() de su BroadcastReceiver acepta un parámetro de contexto. Puede usar esto para iniciar actividades y otras cosas.
Si esta no es la razón por la que desea la clase Singleton de MyApp, y existen razones justificadas para necesitarla, me gustaría ver la implementation designed by Bill Pugh, ya que es la más segura en Java teniendo en cuenta la sincronización y el bloqueo de subprocesos.
Espero que esto ayude. Recuerde, no pelee con el SDK, deje que funcione para usted.
tuve un problema similar, pude acceder a un objeto en la actividad utilizando este patrón:
public class MyReceiver extends android.content.BroadcastReceiver {
private Object _object;
public MyReceiver(Someobject) {
_object = the object;
}
@Override
public void onReceive(Context context, Intent intent) {
Do something to the object.
}
}
luego llamar a MyReceiver(theobject)
en lugar de new BroadcastReceiver()
.
- 1. Spring ApplicationContext Bean Scope
- 2. Cómo inyectar ApplicationContext en sí
- 3. BroadcastReceiver como clase interna
- 4. getApplication en BroadcastReceiver en Android
- 5. Video en WebView - ApplicationContext vs Activity Context
- 6. llamada Android TTS en BroadcastReceiver
- 7. ACTION_USER_PRESENT en manifiesto con BroadcastReceiver
- 8. ¿Cómo reemplazar una instancia en __init __() con un objeto diferente?
- 9. Android: almacenamiento de referencias a ApplicationContext
- 10. Servicio de inicio de BroadcastReceiver
- 11. BroadcastReceiver vs Service
- 12. BroadcastReceiver onReceive timeout
- 13. Android BroadcastReceiver android.intent.action.BATTERY_CHANGED
- 14. Servicio y BroadCastReceiver
- 15. BroadcastReceiver para la ubicación
- 16. BroadcastReceiver: no se puede crear una instancia de clase; sin constructor vacío
- 17. BroadcastReceiver para desconectar auriculares
- 18. startActivity() desde BroadcastReceiver
- 19. Thrift - instancia diferente de Handler para cada socket
- 20. BroadcastReceiver No recibe Broadcast
- 21. Recuperar requestcode de BroadcastReceiver alarma
- 22. Show Complex Toast de BroadcastReceiver
- 23. usando getWindowManager() dentro BroadcastReceiver
- 24. Cómo crear BroadcastReceiver sin Actividad
- 25. Mejor práctica de la inyección de ApplicationContext en Spring3
- 26. ¿Por qué usar las jerarquías Spring ApplicationContext?
- 27. Cómo acceder a ApplicationContext desde un controlador
- 28. cómo leer Variable de entorno del sistema en Spring applicationContext
- 29. Prueba con Spring y Maven: applicationContext
- 30. ¿Por qué llamar a setResult en BroadcastReceiver?
¿Cómo declaraste tu variable "global"? –
seguro, es un miembro de mi clase MyApp. Encontré una solución yo mismo, pero aún tengo una pregunta: (en el manifiesto) funciona bien, antes tenía
Estoy teniendo el mismo problema. ¿Cómo resolvió esto? – Vincent