una toda studio son setflags qué pila los limpiar intents intent eliminar comunicar cerrar activity actividades actividad android android-intent

son - limpiar toda la pila de actividades android studio



Intent.FLAG_ACTIVITY_CLEAR_TOP no elimina la pila de actividades (9)

Estoy desarrollando la aplicación en la que quiero cerrar toda la aplicación al hacer clic en el botón. Sé que en Android no deberíamos pensar en cerrar la aplicación porque Android lo hace automáticamente de esto. ¿Está abandonando una aplicación desaprobada? . pero aun así quiero cerrar mi aplicación.

Entonces, lo que estoy haciendo para cerrar la aplicación es que estoy usando el indicador Intent.FLAG_ACTIVITY_CLEAR_TOP para eliminar la pila de actividades.

Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish();

Y en onCreate of FinishActivity.class llamo this.finish() pero la aplicación no se cierra y la actividad anterior se vuelve a abrir.

FinishActivity.class

@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.finish(); }

Actualización:

Aquí está el escenario

MainActivity->Activity2->Activity3->FinishActivity

Aquí Activity2 se abre después de terminar la actividad.

¿Cómo logro esto? Cualquier idea y sugerencia será apreciada.

Gracias y Saludos


Dale una oportunidad. Esto debería borrar tu pila de actividades.

Intent i = new Intent(this,MyActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i);


De la documentación para Intent.FLAG_ACTIVITY_CLEAR_TOP

Si se establece, y la actividad que se está iniciando ya se está ejecutando en la tarea actual, en lugar de lanzar una nueva instancia de esa actividad, todas las demás actividades que se encuentren encima se cerrarán y esta intención se entregará al (ahora encendido arriba) actividad anterior como un nuevo propósito.

Para que funcione, su actividad FinishActivity debe ser la primera en su pila de actividades. En cualquier otro caso, esta solución no le daría nada.

Debe realizar varios pasos para realizar esto:

1) Haz que FinishActivity sea ​​tu actividad de FinishActivity .

2) No proporcione ninguna vista para ello y comience la primera Activity de su aplicación directamente desde la onCreate devolución de llamada de onCreate :

3) redefinir onRestart devolución de llamada:

Muestra de código:

private boolean isNeedToContinue = true; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); } @Override protected void onResume() { super.onResume(); if (isNeedToContinue) { startActivity(new Intent(this,FirstVisibleActivity.class)); isNeedToContinue = false; } else { finish(); } } @Override protected void onRestart() { super.onRestart(); finish(); isNeedToContinue = false; }

Supongo que esto es todo lo que necesitas. ¡Buena suerte!


Prueba Like this Way esto es trabajo para mí:

Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish();

en lugar de tu código

Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish();


Prueba esto:

Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish();


setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

aparte de configurar launchMode en "singleTop" en la definición de FinishActivity en xml, sobrescribir el método NewInntent, puede pasar información adicional como parte de la intención, instated de finalizar su actividad en onCreate finalizar en el método de actividad NewNevent basado en alguna señal de llamada actividad o simplemente terminarla en función de su necesidad. Es posible que tus otras actividades tengan diferentes modos de laca, por eso no están terminando.


Utilizar esta--

Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); finish();

Editado - Nueva respuesta y funcionaría perfectamente ...

solo tomando un ejemplo ... hazlo en consecuencia, lo que tu proyecto necesita--

Estoy tomando tres clases de actividades A, B y C ... y he aplicado el botón Cerrar en la vista de la Actividad de clase C. Si lo deseas, en el botón Atrás puedes ir a la Actividad anterior y presionar el botón Cerrar. saldría de las aplicaciones ... tengo una mirada--

public class AActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent i = new Intent(this, B.class); startActivityForResult(i, 1); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (resultCode == 5) { finish(); } }

}

Tome la actividad de la próxima clase--

public class B extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.b); Intent i = new Intent(this, C.class); startActivityForResult(i, 2); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (resultCode == 5) { setResult(5); finish(); } }

}

Tome la última actividad--

public class C extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.c); } // close button..set by xml view..you can set it by button listener. public void close(View v) { setResult(5); finish(); }

}

Con suerte, eso resolvería tu problema ... ¡jugadores!


Esto funcionó para mí:

Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish();


Esto finalmente funcionó para mí el 100% del tiempo. Probé todas las banderas de forma independiente, nunca funcionó para todas las instancias del código. Utilicé todas las banderas donde quiera esta funcionalidad, alrededor de 5 lugares diferentes, y ahora funciona.

Intent intent = new Intent(actvSignIn.this, actvNearbyPlaces.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish();


Como otras respuestas tienen lo siguiente, debería funcionar.

Intent intent = new Intent(Activity3.this, FinishActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

Para el nivel API <11, Intent.FLAG_ACTIVITY_CLEAR_TASK no está disponible. En cambio, utilicé IntentCompat.FLAG_ACTIVITY_CLEAR_TASK desde la biblioteca de soporte.

Ver IntentCompat

Podría ayudar a alguien a tropezar.