samsung pila historial google como chrome celular buscado borrar automaticamente actividades actividad android android-activity stack

historial - Android: Borrar actividad apilada



mi actividad google borrar historial (9)

Estoy teniendo varias actividades en mi aplicación. y el flujo es muy complicado. Cuando hago clic en la aplicación Logout, se inicia en la pantalla de inicio de sesión y desde allí el usuario puede salir mediante el system.exit(0) cancel buton (llamando a system.exit(0) )

Cuando salgo o retrocede, el sistema invoca una actividad de la pila :( ¿cómo puedo borrar todas las actividades de la pila cuando llego a la pantalla de inicio de sesión? Llamar a finish() no es práctico ya que hay tantas actividades y algunas actividades no deberían ser cerrado cuando están activos, como actividad de invocación de cámara nativa.

validateuser logoutuser = new validateuser(); logoutuser.logOut(); Intent loginscreen = new Intent(homepage.this, Login2.class); (homepage.this).finish(); loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(loginscreen);


Aquí hay un método de ayuda simple para comenzar una nueva actividad como la nueva actividad principal que funciona desde el nivel 4 de API hasta la versión actual 17:

static void startNewMainActivity(Activity currentActivity, Class<? extends Activity> newTopActivityClass) { Intent intent = new Intent(currentActivity, newTopActivityClass); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) intent.addFlags(0x8000); // equal to Intent.FLAG_ACTIVITY_CLEAR_TASK which is only available from API level 11 currentActivity.startActivity(intent); }

llámalo así de tu actividad actual:

startNewMainActivity(this, MainActivity.class);


Cuando llamas a startActivity en la última actividad, siempre puedes usar

Intent.FLAG_ACTIVITY_CLEAR_TOP

como una bandera en ese intento.

Lea más sobre la bandera here .


En mi caso, LoginActivity también se cerró. Como resultado,

Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK

no ayudó.

Sin embargo, establecer

Intent.FLAG_ACTIVITY_NEW_TASK

me ayudó.


Esta decisión funciona bien:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

Pero la nueva actividad se inicia mucho y se ve una pantalla blanca en algún momento. Si esto es crítico, utilice esta solución alternativa:

public class BaseActivity extends AppCompatActivity { private static final String ACTION_FINISH = "action_finish"; private BroadcastReceiver finisBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiver(finisBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { finish(); } }, new IntentFilter(ACTION_FINISH)); } public void clearBackStack() { sendBroadcast(new Intent(ACTION_FINISH)); } @Override protected void onDestroy() { unregisterReceiver(finisBroadcastReceiver); super.onDestroy(); } }

Cómo lo usa:

public class ActivityA extends BaseActivity { // Click any button public void startActivityB() { startActivity(new Intent(this, ActivityB.class)); clearBackStack(); } }

Desventaja: todas las actividades que deben cerrarse en la pila deben ampliar BaseActivity


La mayoría de ustedes está equivocada. Si desea cerrar la pila de actividad existente independientemente de lo que haya allí y crear una nueva raíz, el conjunto correcto de indicadores es el siguiente:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

Del doc :

public static final int FLAG_ACTIVITY_CLEAR_TASK
Agregado en el nivel de API 11

Si se establece en un Intento pasado a Context.startActivity() , este indicador hará que cualquier tarea existente que esté asociada con la actividad se borre antes de que se inicie la actividad. 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 .


Noté que usted solicitó una solución que no se basa en finish() , pero me pregunto si esto puede ayudar de todos modos.

Realicé un seguimiento de si una bandera de salida se genera con una variable de clase estática, que sobrevive toda la vida útil de la aplicación. En cada actividad relevante onResume() , use

@Override public void onResume() { super.onResume(); if (ExitHelper.isExitFlagRaised) { this.finish(); } }

La clase ExitHelper

public class ExitHelper { public static boolean isExitFlagRaised = false; }

Digamos que en la actividad principal, un usuario presiona un botón para salir; puede establecer ExitHelper.isExitFlagRaised = true; y luego finish() . A partir de entonces, también se finalizarán otras actividades relevantes que se reanudan automáticamente.


Para los desarrolladores de Xamarin, puedes usar:

intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);


Borrar actividad Backstate por el siguiente código:

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

Hecho


Intent intent = new Intent(LoginActivity.this, Home.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //It is use to finish current activity startActivity(intent); this.finish();