El modo estricto de Android detecta una violación múltiple de instancia de actividad, pero no tengo idea de por qué

Código es probablemente demasiado complejo para publicar aquí en su totalidad, pero aquí está el esquema básico: Tengo dos subclases de Activity , cada uno de los cuales alberga un ListView . Cada ListView tiene un adaptador de una clase personalizada, que genera instancias de View también de una clase personalizada. Estas listas muestran elementos de datos que se generan asincrónicamente en otro subproceso; WeakReference<> que necesita saber a dónde enviar las actualizaciones, los objetos de datos que manipula tienen objetos WeakReference<> que están configurados para mantener referencias a los adaptadores que muestran su contenido cuando se inicializan. Cuando se selecciona un objeto en la lista de la primera actividad, inicie la segunda actividad con una intención que le ordene buscar el elemento y mostrar su contenido. A continuación, utilizar el botón de 'atrás' para cerrar la segunda actividad y volver a la primera. Por alguna razón, cuando ejecuto esto con la comprobación de StrictMode habilitada, siempre se bloquea después de algunas iteraciones de conmutación entre las dos actividades, quejándose de que hay demasiadas instancias de una de mis clases de Activity .

He arreglado para que un volcado del montón sea escrito apenas antes del desplome (vea Android StrictMode y volcados del montón ). Estos volcados de montón siempre muestran que hay 1 instancia de cada una de mis dos actividades en el montón en el momento de la terminación. En primer lugar, ¿esto no es de esperar cuando recientemente he cambiado entre los dos, y si es así, ¿por qué StrictMode queja de esto? Si no se espera, ¿cómo puedo arreglar para evitar esto? Examinando el volcado de la pila, ambos objetos son referenciados de la pila principal del hilo, sobre la cual no parezco tener cualquier grado útil de control. Cada uno también tiene una referencia de android.app.ActivityThread$ActivityClientRecord , que también no parecen ser capaces de controlar.

Así que, básicamente, cualquier idea de cómo evitar esta situación? ¿Esto realmente representa una fuga de actividad, o es StrictMode sólo ser demasiado sensible?

Sé que esto es viejo poste. Sólo para chicos que está buscando solución y explicación a este problema.

En caso de que exista excepción InstanceCountViolation, significa que hay un problema real que la fuga de actividad. De lo contrario, puede haber un problema relacionado con la forma en que detecta la detección de ActivityLeaks se implementa en Android SDK.

Para identificar si este es un problema, puedo recomendar la siguiente publicación: Detectar actividades filtradas en Android . Si ves que hay objetos que contienen una referencia a esta actividad que no están relacionados con Android Framework, entonces tienes un problema que debe ser arreglado por ti.

En caso de que no exista ningún objeto que contenga una referencia a esta actividad que no esté relacionada con Android Framework, significa que se ha encontrado con el problema relacionado con cómo se implementa la detección de ActiveSecurityLeaks. En este caso para solucionar el problema con la actividad fallida sin apagar detectivesActivityLeaks, simplemente puede ejecutar System.gc () antes de iniciar la actividad en la configuración de depuración, como en el ejemplo siguiente:

  if (BuildConfig.DEBUG) { System.gc(); } Intent intent = new Intent(context, SomeActivity.class); this.startActivity(intent); 

Más información está disponible en esta respuesta .

  • Limpiar la memoria del montón para Excepción de memoria perdida
  • Android: liberación de la memoria asignada AnimationDrawable está utilizando hasta
  • ¿Por qué se recomienda no retener el fragmento con la interfaz de usuario?
  • No se pueden obtener asignaciones en Android 4.4.4
  • ¿Es esta Runnable a salvo de fugas de memoria?
  • Pasando referencia a la actividad a la clase de utilidad android
  • Obtenga memoria de proceso libre en android
  • Inicializaciones repetidas de actividad y uso de memoria
  • Fuga de memoria de Android Drawables
  • ¿Por qué debería descartar AlertDialog manualmente en Android?
  • Tamaño máximo de montón nativo en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.