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.