Termina todas las actividades a la vez

Tengo una aplicación con varias páginas, es decir, múltiples actividades y algunas de ellas permanecen abiertas.

¿Hay alguna forma de cerrar todas las actividades a la vez?

Siempre que desee salir de todas las actividades abiertas, debe presionar un botón que carga la primera actividad que se ejecuta cuando se inicia la aplicación, luego borra todas las demás actividades y luego termina la última actividad restante. para hacerlo, aplique el siguiente código en su proyecto

Intent intent = new Intent(getApplicationContext(), FirstActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); 

El código anterior termina todas las actividades a excepción de FirstActivity. Entonces tenemos que terminar FirstActivity’s Ingrese el siguiente código en Firstactivity’s oncreate

 if (getIntent().getBooleanExtra("EXIT", false)) { finish(); } 

y has terminado …

Hay un método finishAffinity() en Activity que finalizará la actividad actual y todas las actividades principales, pero solo funciona en Android 4.1 o superior.

Para API 16+, use

 finishAffinity(); 

Para menor (Android 4.1 inferior), use

 ActivityCompat.finishAffinity(YourActivity.this); 

La mejor solución que he encontrado, que es compatible con dispositivos con nivel API <11

 Intent intent = new Intent(getApplicationContext(), HomeActivity.class); ComponentName cn = intent.getComponent(); Intent mainIntent = IntentCompat.makeRestartActivityTask(cn); startActivity(mainIntent); 

Esta solución requiere una biblioteca de soporte de Android

Para API 16+, use

 finishAffinity(); 

Para menor, use

 ActivityCompat.finishAffinity(YourActivity.this) 

Hay tres soluciones para borrar el historial de actividad.

1) Puede escribir finish() en el momento de comenzar una actividad nueva a través del bash.

2) Escribe android:noHistory="true" en toda la etiqueta en el archivo Androidmanifest.xml, usando esto si estás abierto a una nueva actividad y no escribes finish () en ese momento la actividad previa siempre está terminada, después de escribir tu actividad se ve así

   

3) escriba system.exit(0) para salir de la aplicación.

Estaba luchando con el mismo problema. Abriendo la página Acerca de y llamando a finish(); desde que no se cerraba la aplicación, en cambio, se estaba yendo a la actividad anterior y quería cerrar la aplicación desde la misma página.

Este es el código que funcionó para mí:

 Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); finish(); 

Espero que esto ayude.

Si está buscando una solución que parece ser más “por libro” y diseñada metodológicamente (utilizando un BroadcastReceiver), es mejor que consulte el siguiente enlace: http://www.hrupin.com/2011/10 / how-to-finish-all-activities-in-your-android-application-through-simple-call .

Se requiere un ligero cambio en la implementación propuesta que aparece en ese enlace: debe usar el método sendStickyBroadcast (Intención) (no olvide agregar el permiso BROADCAST_STICKY a su manifiesto) en lugar de sendBroadcast (Intención), para habilitar su pausó las actividades para poder recibir la transmisión y procesarla, y esto significa que también debe eliminar esa emisión pegajosa mientras reinicia su aplicación llamando al método removeStickyBroadcast (Intención) en el método onCreate () de la Actividad de apertura.

Aunque las soluciones basadas en StartActivity (…) antes mencionadas, a primera vista, parecen ser muy bonitas, elegantes, cortas, rápidas y fáciles de implementar, se sienten un poco “equivocadas” (para comenzar una actividad) con todo el potencial sobrecarga y recursos que pueden requerirse e involucrarse en él, solo para matarlo? …)

Seguir dos banderas funcionó para mí. Borrarán todas las actividades anteriores y comenzarán una nueva

  Intent intent = new Intent(getApplicationContext(), MyDetails.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Espero que esto ayude.

Puede intentar simplemente finalizarAfinity (), cierra todas las actividades actuales para que funcione en la v4.1 anterior

Puede almacenar un indicador booleano para representar si todas las actividades deben finalizar o no (más preferido en sus preferencias compartidas), entonces el método onStart() de cada actividad debería tener algo como:

 SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(this); boolean needToDestroyFlag=pref.getBoolean("destroyFlag", false); if(needToDestroyFlag) { finish(); }else { //... } 

Obviamente puedes configurar esta bandera como a continuación cuando necesites terminar todas las actividades (en la actividad actual) después de hacerlo, puedes llamar al método finish () en la actividad actual que dará como resultado terminar la actividad actual y actividades pop desde una hasta uno, el método onStart () de cada uno se ejecuta y hace que lo termine:

 SharedPreferences.Editor editor=PreferenceManager.getDefaultSharedPreferences(this).edit(); editor.putBoolean("destroyFlag", true); editor.apply(); 

Si usa el método sugerido por @letsnurture, se encontrará con la pregunta de @gumuruh.

Problema con finishAffinity() es que solo las actividades en su tarea actual están cerradas, pero las actividades con singleInstance launchMode y en otras tareas aún se abren y se ponen en primer plano después de finishAffinity() . El problema con System.exit(0) es que finalizas el proceso de tu aplicación con todos los servicios en segundo plano y toda la memoria asignada y esto puede provocar efectos secundarios no deseados (por ejemplo, no recibir más notificaciones).

Aquí hay otras dos alternativas que resuelven ambos problemas :

  1. Use ActivityLifecycleCallbacks en su clase de aplicación para registrar actividades creadas y ciérrelas cuando sea necesario: https://gist.github.com/sebaslogen/5006ec133243379d293f9d6221100ddb#file-myandroidapplication-kt-L10
  2. En las pruebas puede usar ActivityLifecycleMonitorRegistry : https://github.com/sebaslogen/CleanGUITestArchitecture/blob/master/app/src/androidTest/java/com/neoranga55/cleanguitestarchitecture/util/ActivityFinisher.java#L15

Utilizar

 finishAffinity (); 

En lugar de:

 System.exit(); or finish(); 

sale de la aplicación completa o de toda la actividad.

Si está rooteado:

 Runtime.getRuntime().exec("su -c service call activity 42 s16 com.example.your_app"); 

Puede usar el método finishAffinity() que finalizará la actividad actual y todas las actividades principales. Pero funciona solo para API 16+ .

Uso de API 16+:

 finishAffinity(); 

Por debajo del uso API 16:

 ActivityCompat.finishAffinity(this); //with v4 support library 

Para salir de la aplicación completa:

 finishAffinity(); // Close all activites System.exit(0); // closing files, releasing resources 

Ninguna de las respuestas mencionadas anteriormente funcionó para mí. Pero investigué un poco más y finalmente obtuve la respuesta.

De hecho, solicitó cerrar la aplicación como lo necesitaba. entonces, agregue el siguiente código

 finishAffinity(); 

cierra la aplicación

 Intent intent = new Intent(getApplicationContext(), Splash_Screen.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); 

pon esto en oncreate y onResume de la primera actividad que se abre. ex. está en la actividad de pantalla de bienvenida

 if (getIntent().getBooleanExtra("EXIT", false)) { this.finish(); System.exit(0); } 

Soy principiante en Java / Android, puede ser esta simple solución de ayuda para usted

PRIMERO , crea una clase estática

 public class ActivityManager { static Activity _step1; static Activity _step2; static Activity _step3; public static void setActivity1(Activity activity) { _step1 = activity; } public static void setActivity2(Activity activity) { _step2 = activity; } public static void setActivity3(Activity activity) { _step3 = activity; } public static void finishAll() { _step1.finish(); _step2.finish(); _step3.finish(); } } 

ENTONCES cuando ejecuta una nueva actividad, guarde el enlace a su administrador (en el paso 1):

 ActivityManager.setActivity1(this); AddValuesToSharedPreferences(); Intent intent = new Intent(Step1.this, Step2.class); startActivity(intent); 

Y LUEGO en tu último paso termina todo:

  public void OkExit(View v) throws IOException { ActivityManager.finishAll(); } 
    Intereting Posts