studio - ¿Es una buena idea llamar a finish() después de comenzar una nueva actividad en Android?
pasar de un activity a otro android studio (2)
Me gusta:
startActivity(intent);
finish();
Sin llamar a finish() explicitly, onDestroy()
no se llama a finish() explicitly, onDestroy()
para la Actividad anterior, y me (OutOfMemory Exception).
sin memoria (OutOfMemory Exception).
Entonces, ¿es una buena idea llamar a finish() explicitly to prevent OutOfMemory Exception?
Cuando inicia una nueva actividad, la actividad actual se inserta en la pila de la tarea actual. (Puede cambiar este comportamiento a través de las banderas y / o el manifiesto, pero este es el comportamiento predeterminado). Cuando el usuario presiona la función Atrás, la actividad principal finaliza y la pila se abre. El resultado es que el usuario ve que la aplicación vuelve a la actividad anterior.
Está perfectamente bien llamar a finish()
después de comenzar una nueva actividad. El resultado será que la actividad actual (que ya no está en la parte superior de la pila, ya que acaba de comenzar una nueva) se eliminará de la pila. Luego, cuando el usuario presiona Atrás, irá a la actividad anterior en la pila trasera (o salga de su aplicación si la pila está vacía).
Si se está moviendo de un lado a otro entre, digamos, las actividades A y B, siempre iniciando una nueva y nunca llamando a finish()
, esto puede provocar una excepción OOM a medida que la pila se llena con instancias de cada actividad.
Puede leer más sobre esto en el tema de la guía Tareas y Back Stack . También describe cómo lidiar correctamente con el ciclismo entre actividades.
Hacer esto está bien si no necesita una instancia de esa Activity
. Por lo tanto, cuando vuelva a presionar en la siguiente Activity
sabrá que no volverá a esta, pero lo que sea que esté en la pila debajo de esa Activity
o la pantalla de inicio, si no hay más.
Sin embargo, no estoy seguro de que esta sea la razón por la que está obteniendo una excepción OOM
y probablemente debería averiguar de dónde proviene eso. Si está utilizando Bitmap
s, eso podría estar causando la excepción.