life intent finishaffinity activity android android-intent android-activity logout flags

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.