Operaciones sobre actividades

Obtener la actividad actual y la clase de actividad base

Crear una clase base Java llamada BaseActivity y hacer que herede

android.support.v7.app.AppCompatActivity

Luego sobrescribimos el método onCreate dentro de esta clase base

Después agregamos una línea de registro

Log.d(«Actividad actual»,getClass().getSimpleName());

De esta forma, sin importar a qué actividad entremos, sabremos cuál es la activa

package com.foxdevelop.www.lifedemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("Actividad actual",getClass().getSimpleName());
    }
}Lenguaje del código: JavaScript (javascript)
05-13 08:36:47.473 18499-18499/? D/Actividad actual: MainActivity
05-13 08:36:56.460 18499-18499/com.foxdevelop.www.lifedemo D/Actividad actual: NormalActivity
05-13 08:37:03.839 18499-18499/com.foxdevelop.www.lifedemo D/Actividad actual: Activity3
05-13 08:38:11.104 18499-18499/com.foxdevelop.www.lifedemo D/Actividad actual: NormalActivity

Salir de la aplicación con un clic

Si estamos en la tercera actividad y queremos salir, debemos pulsar atrás tres veces, lo cual resulta incómodo

Presionar el botón de inicio no cierra la aplicación, solo la suspende.

Entonces, ¿cómo hacemos para salir de la app con un solo clic?

Podemos crear una clase de colección dedicada para gestionar todas las actividades.

Agregamos un gestor de actividades para encargarse de esto

Es una clase de colección que contiene una lista para guardar todas las actividades. Tiene métodos add y remove para agregar o quitar actividades individuales

En la actividad base, llamamos a add en onCreate y a remove en onDestroy

Así nos aseguramos de que la lista solo contenga actividades que estén en la pila

La lista guarda referencias de cada actividad, así que llamar a finish es equivalente a cerrar cada instancia.

Luego agregamos el método finishAll a la clase de colección

En este método usamos un bucle foreach y llamamos al método finish de cada actividad

Vamos a probarlo a continuación

En la tercera actividad, registramos el evento de clic del botón y llamamos a esta clase de colección.

Encapsulamos finishAll como método estático.

Para garantizar el cierre total, podemos usar el método del sistema killProcess para terminar el proceso de la app.

android.os.Process.KillProcess(android.os.Process.myPid());

Clase gestor de actividades

package com.foxdevelop.www.lifedemo;
import android.app.Activity;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;
public class ActivityHelper {
    public  static List<Activity> activities = new ArrayList<Activity>();
    public static void add (Activity a)
    {
        activities.add(a);
    }
    public static void remove (Activity a)
    {
        activities.remove(a);
    }
    public  static void finishAll()
    {
        for (Activity a:activities)
        {
            a.finish();
        }
    }
}Lenguaje del código: JavaScript (javascript)

Agregar y eliminar actividades en la actividad base

Agregar actividad al crearse: onCreate

Eliminar actividad al destruirse: onDestroy

package com.foxdevelop.www.lifedemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("Actividad actual",getClass().getSimpleName());
        ActivityHelper.add(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityHelper.remove(this);
    }
}Lenguaje del código: JavaScript (javascript)

Agregar botón en Activity3 para llamar a finishAll

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Tercera actividad" />
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Salir de la app" />
</LinearLayout>Lenguaje del código: HTML, XML (xml)
public class Activity3 extends BaseActivity {
    private static final String TAG = "Tercera actividad";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_3);
        Log.e(TAG, "" + getTaskId());
        Button b = (Button)findViewById(R.id.button);
        b.setOnClickListener(
                new View.OnClickListener(){
                    @Override
                    public void onClick(View view){
                        ActivityHelper.finishAll();
                    }
                }
        );
    }
}Lenguaje del código: PHP (php)

Operaciones sobre actividades

Deja una respuesta

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