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