Cerrar la jerarquía de actividades en Android

¿Cómo puedo cerrar toda una jerarquía de actividades y mostrar una nueva actividad que no está presente en la tarea actual?

Contexto

Considere un navegador FTP que reanude la sesión anterior al iniciar. Cada carpeta se muestra en su propia actividad. Cuando hago clic en una carpeta, se inicia una nueva actividad para la carpeta. Si presiono el botón Atrás, la aplicación vuelve a la actividad anterior, que corresponde a la carpeta principal.

Puedo cerrar la sesión del menú en cualquier momento. El cierre de sesión debe llevarme a la actividad de inicio de sesión (no se presenta la tarea actual cuando la aplicación ha reanudado la sesión) y cerrar todas las otras actividades. ¿Cómo puedo hacer esto?

De lo que he leído, si la actividad estaba en la tarea actual podría utilizar FLAG_ACTIVITY_CLEAR_TOP en la intención, pero este no es mi caso.

Un enfoque puede estar utilizando startActivityForResult. Por ejemplo, su primera actividad es LoginActivity y las actividades posteriores son FolderActivity. Así que el flujo será
1. LoginActivity (actividad del lanzador)
2. Actividad de carpeta (raíz como la carpeta)
3. FolderActivity (contenido de la carpeta pulsada) … y así sucesivamente
así que ahora usa startAcitivityForResult para iniciar cualquier actividad de carpeta nueva.

  public class LoginActivity extends Activity { onCreate() { } onLogin() { startActivityForResult(intent, 100 /*some request code*/); //start Folder Activity, } @override onActivityResult(int requestCode, int resultCode, Intent intent) { if(requestCode == 100 && resultCode == LOGOFF_ACTION) { //sign out and show the login screen } } 

public class LoginActivity extends Activity { onCreate() { } onLogin() { startActivityForResult(intent, 100 /*some request code*/); //start Folder Activity, } @override onActivityResult(int requestCode, int resultCode, Intent intent) { if(requestCode == 100 && resultCode == LOGOFF_ACTION) { //sign out and show the login screen } }

public class FolderActivity extends Actividad {
onCreate () {
}
onClickOnSomeFolder () {
startActivityForResult (intento / * con detalles de la carpeta, etc * /, 100);
}
@anular
onActivityResult (int requestCode, int resultCode, intención de intención) {
if (requestCode == 100 && resultCode == LOGOFF_ACTION) {
setResult (resultCode, intento);
terminar();
} else if (requestCode == 100 && resultCode == BACK_BUTTON) {
/ * No es necesario terminar esta actividad * /
}
}
onBackButton () {
setResult (BACK_BUTTON, intención);
terminar();
}
onLogOff () {
setResult (LOGOFF_ACTION, intención);
terminar();
}
} Así que ahora si el usuario decide firmar con el menú, las actividades comenzarán a finalizar en el mismo orden hasta que llegue a la LoginActivity.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.