studio programacion herramientas fundamentos con avanzado aplicaciones android android-activity activity-finish

android - programacion - Termina todas las actividades a la vez



manual de android en pdf (16)

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?


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.


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 intento.

2) Escribe android:noHistory="true" en toda la etiqueta <activity> 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í

<activity android:name=".Splash_Screen_Activity" android:label="@string/app_name" android:noHistory="true"> </activity>

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


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


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();

Espero que esto los ayude chicos.


Para API 16+, use

finishAffinity();

Para menor, use

ActivityCompat.finishAffinity(YourActivity.this)


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

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.


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


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


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.


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? ...)


Si está rooteado:

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


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 ...


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(); }


Utilizar

finishAffinity ();

En lugar de:

System.exit(); or finish();

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