android - life - Activity.finishAffinity() vs Intent.FLAG_ACTIVITY_NEW_TASK | Intención.FLAG_ACTIVITY_CLEAR_TASK
flags intent android (4)
En Android, si desea borrar su pila de Activity
actual e iniciar una nueva Activity
(por ejemplo, cerrar la sesión de la aplicación y lanzar una Activity
inicio de sesión), parece haber dos enfoques.
¿Hay ventajas para uno sobre el otro si su nivel de API objetivo es superior a 16?
1) Afinidad de acabado
Llamando a finishAffinity()
desde una actividad. Activity.finishAffinity
2) banderas de intención
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
El enfoque finishAffinity()
es adecuado para> = API 16.
El enfoque de los indicadores de Intent
es adecuado para> = API 11.
Para ser claros, con el propósito de limpiar la pila de Activity
actual, ambos enfoques parecen funcionar igual de bien. Mi pregunta es si hay problemas con cualquiera de las personas que han experimentado y, por lo tanto, ¿hay alguna razón para elegir una sobre la otra?
Deberías usar banderas de intención para eso.
¿Qué sucede si tiene una gran cantidad de actividades? ¿Llamará de cada una para terminarlas todas?
Es mucho mejor y más fácil simplemente llamar una Intención.
Espero que esto ayude.
Funcionalmente, no hay diferencia, pero al probar esto en GenyMotion parece haber una ligera diferencia visual. Ver web cast: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing
Tendría que intentarlo en una variedad de dispositivos para ver qué tan consistente es.
Subjetivamente, diría que ir con finishAffinity()
porque es más explícito. Sin embargo, si tiene que admitir <SDK 16, realmente no tiene opción.
Prueba esto
Intent.FLAG_ACTIVITY_CLEAR_TOP
Se despeja la pila de actividades anteriores.
Si API> = 21, puedes usar el comando de:
finishAndRemoveTask ();
Finaliza todas las actividades en esta tarea y las elimina de la lista de tareas recientes.
https://developer.android.com/reference/android/app/ActivityManager.AppTask.html