Modos de lanzamiento de Activity

Modos de lanzamiento de Activity – standard

En proyectos reales, debemos definir el modo de lanzamiento adecuado para cada Activity según nuestras necesidades.

Existen cuatro modos de lanzamiento:

standard, singleTop, singleTask y singleInstance

Podemos configurar el atributo launchMode de la Activity en AndroidManifest.xml

standard es el modo de lanzamiento por defecto

Si no lo indicamos, todas las Activities usan este modo por defecto

En este modo, cada Activity nueva se coloca en la parte superior de la pila

El sistema no revisa si esa Activity ya existe en la pila.

Cada vez que se lanza, se crea una nueva instancia de la Activity

Activity principal –> Activity normal —> abrir la activity principal (nueva)

Para esta nueva activity principal, el sistema no tiene en cuenta la instancia anterior

Ahora vamos a ver una demostración

Agregamos un botón en la activity principal. En el evento de clic de ese botón, usamos Intent para abrir otra vez la activity principal

Duda: parece que con solo pulsar atrás una vez ya salimos de la aplicación

No sabemos por qué ocurre esto

Si algún compañero encuentra la causa, compártala con todos.

Modos de lanzamiento de Activity – singleTop

Si configuramos una Activity con el modo singleTop: cuando se lance, si la Activity ya está en la cima de la pila de retroceso, se reutiliza la instancia existente y no se crea una nueva.

Vamos a probarlo. En AndroidManifest.xml ponemos el atributo launchMode de la activity principal como singleTop

Después, no importa cuántas veces pulsemos el botón, no se crean nuevas instancias de la activity principal, y el log solo se muestra una vez.

Con una sola pulsación del botón back salimos de la app Android

Pero si la Activity no está en la cima de la pila, sí se puede generar una instancia nueva

Probemos esto modificando el Intent, esta vez vamos a abrir

otra Activity, y luego desde esa segunda Activity abrimos la activity principal.

La clave es: cuando estamos en la segunda Activity, la cima de la pila no es la activity principal, así que en este caso sí se crea una nueva activity principal.

I/Choreographer: Skipped 37 frames!  The application may be doing too much work on its main thread.Lenguaje del código: HTTP (http)

Problema: al pulsar back salimos al escritorio (de las dos clases anteriores)

Esto pasa porque añadimos una línea finish(); de más en el evento del botón

Log.e(TAG, this.toString()); sirve para registrar la dirección de memoria de la Activity actual

Modo singleTask

Con singleTask podemos asegurarnos de que solo exista una única instancia de esa Activity en toda la aplicación.

En cambio, singleTop solo garantiza una única instancia cuando está en la cima de la pila.

Modo singleInstance y las Tareas Task

Con este modo, el sistema crea una pila de retroceso nueva para gestionar esta Activity

Por ejemplo, tenemos tres Activities. Si asignamos launchMode=singleInstance a la segunda Activity, esta se gestiona mediante una pila de retroceso separada.

En este escenario pasamos de la primera Activity a la segunda, y luego de la segunda a la tercera

Si pulsamos back desde la tercera Activity, volvemos primero a la primera, ya que la primera y la tercera comparten la misma pila de retroceso.

Después, al pulsar back en la primera Activity, pasamos a la segunda. En ese momento la pila de la primera Activity ya está vacía, así que el sistema salta al elemento superior de otra pila de tareas de la app, es decir, la Activity 2. Si pulsamos back otra vez, regresamos al escritorio.

public void onClick(View view){
    Intent it = new Intent(ActividadNormal.this,Actividad3.class);
    startActivity(it);
    finish();
}Lenguaje del código: JavaScript (javascript)
05-13 08:14:26.890 4746-4746/com.foxdevelop.www.lifedemo E/Actividad principal: 113
05-13 08:14:33.755 4746-4746/com.foxdevelop.www.lifedemo E/Actividad normal: 114
05-13 08:14:37.932 4746-4746/com.foxdevelop.www.lifedemo E/Tercera actividad: 113

Modos de lanzamiento de Activity

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *