2011-04-07 4 views
13

¿Es una buena idea establecer específicamente las variables de instancia para null en la devolución de llamada onDestroy() de la actividad? Algo como esto:onDestroy() - para establecer o no las variables de instancia a nulo?

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    mClassVariable1 = null; 
    mClassVariable2 = null; 
    mClassVariable3 = null; 
} 

Si no recuerdo mal de Java SE, todas las referencias que se aíslan & no está conectado a un programa en ejecución & puede ser el recolector de basura de todos modos. Entonces, ¿esto hace que lo anterior sea superfluo?

Por otro lado, el ciclo de vida en los dispositivos móviles es diferente, ¿sería la mejor práctica?

sé que no puede hacer daño para hacerlo, pero a veces hay una serie de variables de clase (referencias a elementos de la interfaz indivudual, etc), por lo que realmente me gustaría saber por mi propia comprensión, lo que realmente está pasando .

¡Gracias de antemano!

+1

Pregunta: Aunque se llama a OnDestroy() cuando sale de una actividad o rota su dispositivo, ¿la clase todavía se mantiene instanciada? Si lo es, ¿no sería peligroso anular las variables? – Salsero69

+0

@ Salsero69: Una muy buena pregunta. No estoy seguro, esperando que las respuestas aquí lo respondan. – OceanBlue

+0

También me enfrento a la misma pregunta, espero que alguien dé más explicaciones. También puse la variable de instancia null en -destruir pero no estoy seguro de que funcione correctamente. – bhavikkumar

Respuesta

7

Has acertado cuando dices que el recolector de basura recogerá las referencias que están aisladas. Específicamente, se recopilará cualquier gráfico de referencias no conectadas al hilo de ejecución. Debido a esto, no hay una buena razón para establecer sus variables a nulo que puedo ver. Cualquier ventaja sería superada por el costo de mantenimiento del código.

+2

Puede ser necesario explicitar referencias nulas en onDestroy. No se garantiza que su actividad mate de inmediato y, por lo tanto, retenga la memoria. Eche un vistazo a http://stackoverflow.com/questions/17187004/large-memory-chunk-not-garbage-collected – Niels

+1

Establecer sus variables de instancia para anular en onDestroy no es la respuesta. Busque fugas en las que conserve una referencia a la actividad destruida. onDestroy significa que el sistema está hecho con la Actividad. Asegúrate de que tu código esté bien. –

Cuestiones relacionadas