Actividad.finishAffinity () vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
En Android, si desea borrar la pila de Activity
actual y iniciar una nueva Activity
(por ejemplo, salir de la aplicación y iniciar una Activity
inicio de sesión), parece que hay dos enfoques.
¿Hay ventajas para uno sobre el otro si el nivel de la API de destino es superior a 16?
- Android: Intent Flag para destruir la actividad y comenzar una nueva
- ¿Cómo comprobar los indicadores de gravedad en una vista Android personalizada?
- Indicadores de intención: cómo iniciar una nueva instancia de actividad y tener otros cerrados
- Android: uso de FLAG_ACTIVITY_NEW_TASK
- ¿Qué bandera usar en SimpleCursorAdapter?
1) Afinidad de acabado
Llamar a finishAffinity()
de una actividad. Actividad.finishAffinity
2) Indicadores 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 finishAffinity()
es adecuado para> = API 16.
El enfoque de indicadores de Intent
es adecuado para> = API 11.
Para ser claros, con el propósito de borrar la pila de Activity
actual, ambos enfoques parecen funcionar igualmente. Mi pregunta es si hay problemas con cualquiera de los que la gente ha experimentado y, por lo tanto, hay alguna razón para elegir uno sobre el otro?
- ¿Cómo evitar la pantalla en negro en startActivity cuando se establece FLAG_ACTIVITY_CLEAR_TASK?
- Android, Intent.FLAG_ACTIVITY_CLEAR_TOP parece que no funciona?
- ¿Cuál es la diferencia entre: notification.flags y notification.defaults?
- Intención de iniciar la actividad - pero no llevar al frente
- ¿Para qué se usan las banderas?
- Diseño del material layout_scrollFlags significado
- Deshabilitar la pantalla de mantenimiento
- Intent es muy lento para lanzar una nueva Actividad :(
Funcionalmente, no hay diferencia, pero probando esto en GenyMotion parece haber una ligera diferencia visual. Ver emisión web: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing
Usted tendría que probar que en una amplia gama de dispositivos para ver cómo es coherente es.
Subjetivamente, yo diría que ir con el finishAffinity()
porque es más explícito. Sin embargo, si tienes que soportar <SDK 16 no tienes realmente una opción.
Debería usar banderas de intenciones para eso.
¿Qué pasa si usted tiene una gran pila de actividades, va a llamar de cada uno para terminar todos?
Es mucho mejor y más fácil llamar a una Intención.
Espero que esto ayude.
Pruebe este Intent.FLAG_ACTIVITY_CLEAR_TOP se borra la pila de actividades anteriores
Si API> = 21, puede utilizar el comando de:
FinishAndRemoveTask ();
Finaliza todas las actividades de esta tarea y las elimina de la lista de tareas recientes.
https://developer.android.com/reference/android/app/ActivityManager.AppTask.html
- Diferencia entre RowId y Position en el parámetro onItemLongClick
- Cómo gestionar varias tareas asíncronas de forma eficiente en Android