library amazing android memory-leaks android-edittext android-textattributes

amazing - Android EditText Memory Leak



menu android github (2)

Estaba confundido acerca de esta pérdida de memoria durante mucho tiempo. Pero recientemente encontré dos formas de solucionar este problema.

  1. Descubrí que si TextView / EditText tiene la propiedad android:hint , esto no puede suceder. Entonces, la forma más fácil es darle a cada TextView / EditText la propiedad de sugerencia.

  2. La forma más contundente es reflexionar sobre TextLine y encontrar el oyente ChangeWatcher, luego matar a este oyente.

Mucha gente se da cuenta de que EditText en una actividad tiene una referencia fuerte para una actividad incluso una vez que termina. Para dejar en claro que EditText está dentro de un diseño e inflado, no hay grupos de escucha establecidos. Esto solo ocurre en ciertos dispositivos, como Samsung Galaxy S4 (Android 4.2.2) y otros. Muchos publican sobre esto todavía no hay solución. Primero aquí hay algunas publicaciones útiles. (Eventualmente, GC lo limpiará, por lo que técnicamente no es una fuga, pero para aplicaciones de memoria pesadas lleva mucho tiempo y causará OOM)

Android Samsung Memory leak en EditText

¿Por qué EditText retiene el contexto de su actividad en Ice Cream Sandwich?

EditText que causa pérdida de memoria

Posibilidad de pérdida de memoria no controlada

Las soluciones indicadas no funcionan para todos los dispositivos. Todo se reduce a Edittext Watcher. Creo que puede haber una solución para anular a este Vigilante que tiene una función para limpiarlo en Destroy (). Por favor, cualquier ayuda aquí, he estado en esto por días.

Aquí está el histograma MAT


Intente utilizar el contexto de la aplicación en lugar del contexto de la actividad en onCreateView () para esta vista particular (que contiene cualquier componente android: textIsSelectable = "true").

// Singleton class MyApplication extends Application { private static MyApplication mApp; @Override public void onCreate() { mApp = this; } public static MyApplication getApp() { return mApp; } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Suggested inflater use Activity Context // So we must tu use Application Context Context context = MyApplication.getApp().getApplicationContext(); LayoutInflater myLayoutInflater = LayoutInflater.from(context); View view = myLayoutInflater.inflate(R.layout.my_view, container, false); return view; }