android - support - Activity onDestroy/Fragment''s onDestroyView set Prácticas nulas
onattach fragment android (2)
Entonces, la razón por la que es diferente entre Fragmentos y Actividades es porque sus ciclos de vida son diferentes. Cuando se destruye una Activity
, se va para siempre. Sin embargo, los Fragments
pueden crear y destruir sus puntos de vista varias veces antes de que realmente sean destruidos. Para aclarar, en una actividad:
onDestroy()
onCreate()
nunca sucederá en secuencia para la misma instancia de actividad . Para un Fragmento, el siguiente es perfectamente válido:
onCreate()
onCreateView()
onDestroyView()
onCreateView()
onDestroyView()
onDestroy()
Un caso en el que puede ver esto es cuando un Fragment
entra en la pila posterior. Su vista se destruirá (ya que ya no está visible) pero la instancia permanecerá para reanudarse fácilmente cuando el usuario presione hacia atrás para regresar a ella (en ese momento se onCreateView()
nuevamente onCreateView()
).
Después de onDestroyView()
, puede (y probablemente debería) lanzar todas sus referencias de View
para permitir que sean basura. En muchos casos, no es necesario, como si solo estuviera sucediendo durante un cambio de configuración, onDestroy()
seguirá inmediatamente y toda la instancia será recogida de basura.
Esencialmente, yo diría que es una buena práctica publicar todas y cada una de las referencias de vista en onDestroyView()
, y podría ahorrar bastante memoria si tu aplicación tiene una gran copia de seguridad.
Estoy leyendo el código fuente de ListFragment y veo esta implementación:
ListAdapter mAdapter;
ListView mList;
View mEmptyView;
TextView mStandardEmptyView;
View mProgressContainer;
View mListContainer;
CharSequence mEmptyText;
boolean mListShown;
/**
* Detach from list view.
*/
@Override
public void onDestroyView() {
mHandler.removeCallbacks(mRequestFocus);
mList = null;
mListShown = false;
mEmptyView = mProgressContainer = mListContainer = null;
mStandardEmptyView = null;
super.onDestroyView();
}
En esta función, los desarrolladores de Google configuran Null para todos los campos de vista declarados en ListFragment y eliminan la devolución de llamada ''mRequestFocus''.
En el código fuente de ListActivity . Desarrolladores de Google implementados de la siguiente manera:
protected ListAdapter mAdapter;
protected ListView mList;
private Handler mHandler = new Handler();
@Override
protected void onDestroy() {
mHandler.removeCallbacks(mRequestFocus);
super.onDestroy();
}
No vi a los desarrolladores de Google establecer Null en mList en onDestroy de ListActivity como lo hicieron para la clase ListFragment.
Mi pregunta es
¿Por qué los desarrolladores de Google no configuraron Null en mList en onDestroy of ListActivity? ¿Alguna razón?
¿Necesitamos establecer Null para todos los campos Ver en Activity onDestroy y Fragment''s onDestroyView?
3. Cualquier práctica para establecer Null en estas dos funciones: Activity onDestroy y Fragment''s onDestroyView?
¡Gracias por tus ideas!
No es necesario establecer nulo si eso no influye en la lógica de la aplicación. Ej. If (mList == null) ...