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

  • Picasso Singleton Uso
  • ¿Es necesario guardar singletons?
  • OnSaveInstanceState con Singleton
  • Obtenga el contexto de aplicación de la clase singleton de no actividad
  • Acceso al objeto GoogleApiClient en Todas las actividades
  • Objetos de comunicación entre fragmentos múltiples en ViewPager
  • ¿Es una práctica aceptable usar Objetos Singleton para guardar el estado o compartir datos entre Actividades?
  • Servicio de Android Creación de una nueva instancia de clase Singleton
  • La forma más segura de usar SharedPreferences
  • Cómo separar la actividad principal y el selector de fechas con las propias clases
  • AlarmManager estático en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.