2010-12-21 11 views
8

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

+0

¿Cómo declaraste tu variable "global"? –

+0

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

+0

Estoy teniendo el mismo problema. ¿Cómo resolvió esto? – Vincent

Respuesta

1

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:

  1. Los diferentes componentes de la aplicación tienen por defecto diferentes contextos (base, aplicación).
  2. Un BroadcastReceiver definido en el manifiesto es invocado por el sistema operativo, no por su aplicación.
  3. El uso de un patrón Singleton para un objeto de contexto dará lugar a algunas dependencias muy desagradables.
  4. 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.

0

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().

Cuestiones relacionadas