2012-09-04 14 views
5

Cuando un usuario toca "Cerrar sesión" dentro de mi aplicación, me gustaría que las lleve a la actividad "Iniciar sesión" y elimine todas las demás actividades en ejecución o pausadas dentro de mi aplicación.Android: elimine todas las actividades al cerrar sesión

Mi aplicación utiliza las Preferencias compartidas para eludir la actividad de "Inicio de sesión" en el inicio si el usuario ha iniciado sesión anteriormente. Por lo tanto, FLAG_ACTIVITY_CLEAR_TOP no funcionará en este caso, ya que la actividad de inicio de sesión estará en la parte superior de la pila de actividades cuando el usuario sea llevado allí.

+1

Aquí está su respuesta. http://stackoverflow.com/questions/5453206/how-to-close-all-the-activities-of-my-application – Abhishek

+0

No he oído esta respuesta, muy útil. Gracias –

Respuesta

12

Se puede usar un BroadcastReceiver para escuchar una señal "matar" en sus otras actividades

http://developer.android.com/reference/android/content/BroadcastReceiver.html

en sus actividades se registra un BroadcastReceiver

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("CLOSE_ALL"); 
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // close activity 
    } 
}; 
registerReceiver(broadcastReceiver, intentFilter); 

A continuación, sólo envía una emisión desde cualquier lugar de su aplicación

Intent intent = new Intent("CLOSE_ALL"); 
this.sendBroadcast(intent); 
+0

esto funcionó como un encanto, gracias por la ayuda –

+0

Esta es una solución muy clara y rápida. Voto – sandalone

+0

manera tan dulce de usar la API de Android :) –

2

En lugar de FLAG_ACTIVITY_CLEAR_TOP uso FLAG_ACTIVITY_CLEAR_TASK (API 11+ sin embargo):

Si se establece en un intento pasado a Context.startActivity(), esta bandera hará que cualquier tarea existente que se asocia con la actividad que ser limpiado antes la actividad esta iniciada Es decir, la actividad se convierte en la nueva raíz de una tarea que, de otro modo, estaría vacía, y todas las actividades anteriores finalizarán. Esto solo se puede usar junto con FLAG_ACTIVITY_NEW_TASK.

+0

Esto fue perfecto. Gracias. :) – Enrichman

8

Para API 11+ puede utilizar Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK así:

Intent intent = new Intent(this, MyActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); 
this.startActivity(intent); 

Será totalmente clara toda la actividad anterior (s) e iniciar una nueva actividad.

+0

hey rockstar, baja tu guitarra :) – Karoly

+0

Esta debería ser la respuesta correcta. ¡Utiliza la transmisión para este truco! –

Cuestiones relacionadas