Solución para acceder a datos globales de todas partes – de forma eficiente

Necesito encontrar una solución que contenga y acceda a grandes trozos de datos y métodos globales complejos. Tiene que ser accesible desde dentro de las actividades y variables de instancia normales de varias clases de datos.

Así es como lo he hecho. Me gustaría saber si hay algo malo con él o si hay una manera mejor / más limpio.

Primero extiendo la Application como se recomienda muchas veces …

 public class MainDataManager extends Application{ public ... large chunks of data in arrays, lists, sets,.... //static variable for singleton access from within instance variables of other classes public static MainDataManager mainDataManager; //create and init the global data, and store it in the static variable of the class @Override public void onCreate() { super.onCreate(); //in case it should get called more than once for any reason if (mainDataManager == null) { init(); mainDataManager = this; } } 

Ahora acceder desde dentro de actividades como por todas partes recomendado …

 MainDataManager mainDataManager = (MainDataManager)getApplicationContext(); 

Y como necesito acceder a él desde instancias normales de clases de datos …

 public class MyDataClass { public MainDataManager mainDataManager; public String name; public MyDataClass(String namex) { this.name = namex; //this is why I defined the static variable within MainDataManager, so //one has access to it from within the instance of MyDataClass this.mainDataManager = MainDataManager.mainDataManager; } public void examplesForAccessing() { //some examples on how to access the global data structure and associated methods mainDataManager.someMethodAccess(); xyz = mainDataManager.someDataAccess; mainDataManager.someIndirectMethodAccess.clear(); mainDataManager.someOtherData = false; } } 

Como no lo he hecho hasta ahora, me gustaría saber si hay algo malo en esto. Memoria, eficiencia, …

¡Muchas gracias!

¿Puedo añadir un poco de sidenote? También podría haber utilizado una clase MainDataClass y el acceso por MainDataClass.var or MainDataClass.method(). ¿Hay alguna desventaja REAL?

¿Los datos en ambos casos se mantienen en montón / pila?

No ha dado muchos detalles sobre sus "grandes trozos de datos", pero tenga en cuenta que el método onCreate es lo primero que se ejecuta cuando su aplicación se inicia y se ejecuta en el subproceso principal / UI. Esto significa que si realiza tareas largas en su método init (), su UX será pobre, por no mencionar que está arriesgando una excepción ANR.

La solución para eso es simple:

  1. Mantenga su onCreate corto
  2. Cree un hilo BG y utilícelo para ejecutar todo el código de inicialización
  3. Muestre una pantalla "Splash" / "Bienvenido" con la barra de progreso adecuada mientras se está ejecutando el subproceso BG.
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.