Android: borra la pila trasera

En Android tengo algunas actividades, digamos A, B, C.

En AI use este código para abrir B:

Intent intent = new Intent(this, B.class); startActivity(intent); 

En BI use este código para abrir C:

 Intent intent = new Intent(this, C.class); startActivity(intent); 

Cuando el usuario pulsa un botón en CI, quiere volver a A y borrar la pila trasera (cerrar B y C). Así que cuando el usuario utiliza el botón de retroceso B y C no se mostrará, he estado intentando lo siguiente:

 Intent intent = new Intent(this, A.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

Pero B y C siguen apareciendo si uso el botón de retroceso cuando vuelvo a la actividad A. ¿Cómo puedo evitar esto?

Intente agregar FLAG_ACTIVITY_NEW_TASK como se describe en los documentos para FLAG_ACTIVITY_CLEAR_TOP :

Este modo de lanzamiento también puede utilizarse con buenos resultados en conjunción con FLAG_ACTIVITY_NEW_TASK: si se utiliza para iniciar la actividad raíz de una tarea, llevará cualquier instancia en ejecución de esa tarea al primer plano y, a continuación, la borrará a su estado raíz. Esto es especialmente útil, por ejemplo, al iniciar una actividad desde el gestor de notificaciones.

Así que su código para lanzar A sería:

 Intent intent = new Intent(this, A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); // call this to finish the current activity 
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 

¿Qué hay acerca de la adición en el archivo de manifiesto para la actividad relacionada:

 android:noHistory="true" 

A la definición de actividad de B y C? No se añadirán al backstack. No estoy seguro si eso es lo que quieres.

Esto me molesta por un largo tiempo. Por fin lo solucioné haciendo esto:

En fragmento, utilice:

 Intent intent = new Intent(view.getContext(), A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

En Actividad, utilice (agregue un indicador de intención más Intent.FLAG_ACTIVITY_CLEAR_TASK comparado con el fragmento):

 Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 
  1. Añadir android:launchMode="singleTop" al elemento de actividad en su manifiesto para la Actividad A
  2. A continuación, utilice intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) y intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) al iniciar la Actividad A

Esto significa que cuando se inicia la Actividad A, todas las tareas encima de ella se borran para que A sea superior. Una nueva pila de respaldo se crea con A en la raíz, y usar singleTop asegura que solo singleTop A una vez (ya que A está ahora en la parte superior debido a ..._CLEAR_TOP ).

A partir de la API 16 (Jelly Bean), puede llamar a finishAffinity() .

Ahora también puede llamar a ActivityCompat.finishAffinity(Activity activity) con la biblioteca de compatibilidad.

Asegúrese de establecer taskAffinity en el manifiesto con un nombre de paquete único para ese grupo de actividades.

Ver para más información:
http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity%28android.app.Activity%29

Intenta usar

 intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

y no

 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

Según Wakka en Eliminar una actividad de la pila de historial …


Agregue el android:noHistory="true" a su <activity> en el AndroidManifest.xml como este:

  <activity android:name=".MyActivity" android:noHistory="true"> </activity> 

Para futuras investigaciones, pruebe este código.

 Intent intent = new Intent(context, LoginActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); 

Utilice finishAffinity (); En la tarea C al iniciar la tarea A para borrar las actividades de backstack.

He encontrado las respuestas aquí un poco engañosa porque el código en la pregunta original parece funcionar bien para mí?

Con A siendo la actividad de la raíz, iniciarla desde B o C sólo con FLAG_ACTIVITY_CLEAR_TOP quita B y C de la pila trasera.

Si su aplicación tiene la versión 16 de sdk mínima, entonces puede usar finishAffinity ()

Termine esta actividad así como todas las actividades inmediatamente debajo de ella en la tarea actual que tengan la misma afinidad.

Esto es trabajo para mí En la pantalla de pago superior quite todas las activaciones de la pila trasera,

  @Override public void onBackPressed() { finishAffinity(); startActivity(new Intent(PaymentDoneActivity.this,Home.class)); } 

http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29

Suena a mí como usted necesita para iniciar la Activity C de la Activity B utilizando startActivityForResult() . Al hacer clic en un botón de la Activity C , llame a setResult(RESULT_OK) y finish() para que finish() Activity C En la Activity B , puede hacer que onActivityResult() responda llamando también finish() a sí mismo, y luego volverá a Activity A

Logout.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TASK); Logout.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);

Puede utilizar este ejemplo para llamar a su Activity A de la Activity C

Intent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);

He probado todas las soluciones y ninguno trabajó individualmente para mí. Mi solución es:

Declare la Activity A como SingleTop utilizando [android:launchMode="singleTop"] en el manifiesto de Android.

Ahora agregue los siguientes indicadores al iniciar A desde cualquier lugar. Se borrará la pila.

 Intent in = new Intent(mContext, A.class); in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK ); startActivity(in); finish(); 

Intent.FLAG_ACTIVITY_CLEAR_TOP no funcionará en este caso. Utilice por favor (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)

Para más detalles, consulte esta documentación.

Además de FLAG_ACTIVITY_CLEAR_TOP , también puede intentar agregar Intent.FLAG_ACTIVITY_SINGLE_TOP :

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

El código dado funciona correctamente. He intentado en la muestra del Ciclo de vida de la aplicación.

No tengo B y C en la pila trasera después de iniciar la actividad A con flag, FLAG_ACTIVITY_CLEAR_TOP

I llamado activity_name.this.finish() después de iniciar nueva intención y funcionó para mí.

 I tried "FLAG_ACTIVITY_CLEAR_TOP" and "FLAG_ACTIVITY_NEW_TASK" 

Pero no va a funcionar para mí … No estoy sugiriendo esta solución para su uso, pero si la bandera de configuración no funcionará para usted que se puede intentar esto .. Pero aún así, recomiendo no lo use

No agregue ninguna bandera de la historia en la intención.

En la actividad B, inicie la actividad C como a continuación >>>>>>

 Intent intent = new Intent(this, C.class); intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); finish(); 

En manifiesto

 android:launchMode="singleTask" 

y

 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

Añada esto a su Activity B y Activity C

 android:noHistory="true" 

O Override onBackPressed función para evitar volver presionando con un return .

 @Override public void onBackPressed() { return; } 

Utilizar este código para iniciar una nueva actividad y cerrar o destruir todos los demás acivity pila o satack espalda …

 Intent intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); 
 Intent intent = new Intent(this, A.class); startActivity(intent); finish(); 
  • ¿Cómo administrar la pila de actividades?
  • Pila de actividad de Android
  • Finalizar todas las actividades iniciadas antes de la actividad
  • ¿Cómo manipulo la pila de actividades de Android?
  • ¿Tener demasiadas actividades afecta mi desempeño?
  • Actividades
  • Error: Theme.Translucent & FLAG_ACTIVITY_REORDER_TO_FRONT
  • Android: ¿Cómo hacer que el lanzador abra siempre la actividad principal en lugar de la actividad infantil? (o de otro modo)
  • Java / Android - ¿Cómo imprimir una traza de pila completa?
  • Ver pila de actividades en Android
  • ¿Simular la vista de pila en Android 2 (API 5)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.