Modificación de la pila trasera en Android

Quisiera modificar la pila trasera en mi aplicación de Android como tal:

Ahora mismo, aquí está el flujo:

A -> B -> C -> D -> E -> F

Quiero ser capaz de modificar la pila trasera, de modo que cuando el usuario va a la actividad F, D y E se borran de la pila. Por lo que el flujo es F -> C si el usuario golpea la espalda.

Además, desde F, el usuario puede ir a la actividad B, esto también debería borrar C, D, E y F.

He visto alguna información sobre la posibilidad de borrar la pila o eliminar el elemento superior, pero quiero quitar un número de elementos de la pila, cuando se activa una actividad.

Cualquier ayuda es apreciada, muchas gracias.

Puedes construir una intención con la bandera intent.FLAG_ACTIVITY_CLEAR_TOP de F a C. Entonces tendrás que llamar a startActivity () con la intención y disparar esto para que ocurra enBackPressed o algo similar.

 Intent i = new Intent(this, C.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i) 

Vea esta respuesta, que también trata de asegurar que C no se reinicie cuando regrese a ella: https://stackoverflow.com/a/11347608/1003511

Lo que FLAG_ACTIVITY_CLEAR_TOP hará será volver a la instancia más reciente de la actividad C en la pila y luego borrar todo lo que está por encima de ella. Sin embargo, esto puede hacer que la actividad se vuelva a crear. Si desea asegurarse de que será la misma instancia de la actividad, utilice FLAG_ACTIVITY_SINGLE_TOP también. De la documentación:

La instancia actualmente en ejecución de la actividad B en el ejemplo anterior recibirá la nueva intención que está iniciando aquí en su método onNewIntent () o se terminará y reiniciará con la nueva intención. Si ha declarado que su modo de inicio es "múltiple" (el valor predeterminado) y no ha configurado FLAG_ACTIVITY_SINGLE_TOP en la misma intención, se terminará y volverá a crear; Para todos los demás modos de lanzamiento o si FLAG_ACTIVITY_SINGLE_TOP está configurado, entonces este Intent será entregado al onNewIntent () de la instancia actual.

Editar: Aquí hay un ejemplo de código similar a lo que quieres hacer:

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent a = new Intent(this, C.class); a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(a); return true; } return super.onKeyDown(keyCode, event); } 

Fuente de código fuente: https://stackoverflow.com/a/9398171/1003511

Lo que necesita es android:excludeFromRecents="true" que debe agregarse en la etiqueta de la actividad en el archivo de manifiesto. Detiene todas las actividades para ir a la pila que tiene esta etiqueta en la etiqueta de actividad en manifiesto.

Ejemplo de código

  <activity android:name="com.xx.xx.ActivityName" android:excludeFromRecents="true" </activity> 

Y asegúrese de que llama al método finish() (después de iniciar otra actividad) en aquellas actividades que no desea que estén en la pila de actividades.

  • Android: Eliminar todas las actividades anteriores de la pila posterior
  • Obtener el último fragmento en la pila trasera
  • Usar backstack con ViewPager
  • Reanudar la actividad en lugar de iniciar si ya existe en la pila trasera
  • SavedInstanceState al restaurar el fragmento de la pila trasera
  • Android: abrir la actividad sin guardar en la pila
  • Navegación de nuevo a FragmentPagerAdapter -> fragmentos están vacíos
  • Android deep linking - Pila trasera
  • ¿Cómo eliminar la actividad singleTask con taskAffinity de las tareas recientes cuando está terminado?
  • Mal comportamiento de Backstack de la actividad cuando la actividad destruida
  • TabLayout ViewPager no carga al utilizar Backstack
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.