La jerarquía de vista es la siguiente TabActivity
->ActivityGroups
->Activities
.InputMethodManager guarda referencia al tabhost - Pérdida de memoria - OOM Error
Usando MAT encontré que TabWidget
es referenciado por TabHost
que se hace referencia por InputMethodManager
, por lo tanto TabWidget
se filtró. En el lanzamiento posterior de la aplicación, se lanza OutOfMemory Error.
Del mismo modo todas mis actividades también se mencionan en InputMethodManager
. (Después de cerrar la aplicación a todos mis grupos de actividades, las actividades, tabactivity, tabhost y TabWidget se filtraron !!)
Al terminar correctamente la aplicación (golpear tecla de retroceso), se muestra en la siguiente Logcat
WARN/InputManagerService (99): a partir de la entrada en [email protected] no centrada en el cliente (uid = 10052 pid = 1463)
Cómo quitar la referencia de InputMethodManager
.. .?
cosa que probé:
A. llama a este método onDestroy
de mi TabActivity
1. myTabWidget.removeAllViews()
2. myTabWidger.invalidate()
No Luck!
- pregunta ya publicado: Main Activity is not garbage collected after destruction because it is referenced by InputMethodManager indirectly
no me refiero InputMethodManager de todos modos. ¿Puede proporcionarme un enlace que explique más sobre "pattern Observer"? – Mani
http://en.wikipedia.org/wiki/Observer_pattern Creamos un modelo como Observable (Asunto) y las Actividades eran Observadores (implementaron la interfaz "Observador"). Al comienzo, la actividad se registró en el modelo (usamos singleton, pero puede usar Service o Application). Si hubo algo interesante, evento disparado observable y notificado a cada cliente. Antes de destruir, la actividad no se registró en Observable para evitar la pérdida de memoria. La mayoría de las causas de pérdida de memoria en Android son muy simples: Contexto/Vista/Diálogo se declararon de manera estática en alguna parte. – QuickNick