Problemas con singleton en android

Tengo una aplicación para Android, donde hay un par de actividades. Cada una de las actividades de descarga de un feed xml / json, analizarlo y empujar que a un singleton por lo general como un arraylist.

Sin embargo, después de pasar por varias actividades, parece que el singleton se está muriendo y la mayoría de las listas de matrices descargadas anteriormente están vacías. ¿Por que es esto entonces? ¿No es una práctica recomendada para compartir datos entre actividades?

3 Solutions collect form web for “Problemas con singleton en android”

Por favor, vea este hilo de las Preguntas frecuentes de la API de Android , aquí encontrará seguramente la solución más apropiada para su problema (si necesita una vida corta o datos de larga duración).

Los singletons se utilizan para objetos cortos de ciclo de vida.

Editar : Tenga en cuenta que para una gran cantidad de datos siempre es mejor utilizar bases de datos / archivos locales estructurados (aunque estos últimos consumen mucho dinero para leer y escribir). Y si está trabajando con objetos muy complejos, elegir SharedPreferences podría causar algún dolor de cabeza también.

Una muestra de almacenamiento / carga de una lista de SharedPreferences :

 // the name with which to store the shared preference public static final String PERSON_LIST = "my.personlist"; // a sample data structure that will be stored public static final class Person { private String name; private int age; public String toString() { return name + "|" + age; } // splits the passed String parameter, and retrieves the members public static Person loadPersonFromString(final String personString) { final Person p = new Person(); final String[] data = personString.split("|"); p.name = data[0]; p.age = Integer.parseInt(data[1]); return p; } } /** * Saves the current list of Persons in SharedPreferences * @param persons: the list to save */ public void savePersonList(final ArrayList<Person> persons) { final SharedPreferences prefs = PreferenceManager. getDefaultSharedPreferences(getApplicationContext()); final Editor editor = prefs.edit(); final StringBuilder builder = new StringBuilder(); for (final Person person : persons) { if (builder.length() > 0) builder.append("-Person-"); builder.append(person.toString()); } editor.putString(PERSON_LIST, builder.toString()); editor.commit(); } /** * Loads the list of Persons from SharedPreferences * @return the loaded list */ public ArrayList<Person> loadPersonList() { final SharedPreferences prefs = PreferenceManager. getDefaultSharedPreferences(getApplicationContext()); final ArrayList<Person> persons = new ArrayList<Menu.Person>(); final String[] array = prefs.getString(PERSON_LIST, "").split("-Person-"); for (final String personString : array) { if (personString.length() > 0) persons.add(Person.loadPersonFromString(personString)); } return persons; } 

Añadir mi comentario como respuesta

Si desea mantener una variable global entre las actividades, guárdela en la aplicación. Amplíe una clase de la aplicación y agregue eso en su archivo AnddroidManifest.

De la FAQ de la API de Android compartida por @rekaszeru

Clase Singleton

Puede aprovechar el hecho de que los componentes de la aplicación se ejecutan en el mismo proceso mediante el uso de un singleton. Se trata de una clase que está diseñada para tener sólo una instancia. Tiene un método estático con un nombre como getInstance () que devuelve la instancia; La primera vez que se llama a este método, crea la instancia global. Debido a que todas las personas que llaman obtienen la misma instancia, pueden utilizar esto como un punto de interacción. Por ejemplo, la actividad A puede recuperar la instancia y llamar a setValue (3); La actividad posterior B puede recuperar la instancia y llamar a getValue () para recuperar el último valor establecido.

Puede inicializarse a través de una clase de aplicación. Esta clase está presente en todas las actividades. Debe declararlo en el archivo de manifiesto y tiene un ciclo de vida similar a una actividad.

Documentación aquí: Aplicación

Espero eso ayude.

JQcorreia

  • Objetos de comunicación entre fragmentos múltiples en ViewPager
  • Configuración del valor de propiedad Singleton en el Listado de Firebase
  • Singleton objeto está recreando
  • Una instancia de MediaPlayer de Android: singleton
  • Métodos estáticos o singleton, ¿cuál elegir?
  • ¿Por qué un servicio Android no es singleton cuando se prueba?
  • Android: No se puede realizar esta operación porque se ha cerrado el grupo de conexiones
  • Cambiar Actividades sin el uso de una Intención
  • ¿Puedo obtener cierta eficiencia al declarar a los miembros apropiados "estáticos" en la actividad de Android?
  • Cómo pasar el contexto de la aplicación dentro Singleton y SharedPreferences Clases
  • Android MediaPlayer Singleton
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.