Existe una diferencia importante en el comportamiento de las tareas de la aplicación según el orden startActivity()y las finish()invocaciones.
El caso que estoy describiendo tiene como alcance solo la situación en la que la actividad actual (la que se detiene) es la única en la tarea.
Normalmente, esperaría que el sistema no altere la intención inicial (la intención que crea para iniciar otra actividad). Y ese no es el caso si finish()se llama en la última actividad de la tarea antes de llamar startActivity().
En este caso, el ActivityManager, un componente del sistema, mientras ejecuta el indicador de startActivity() adiciones Intent.FLAG_ACTIVITY_NEW_TASK a su intención.
Cuando esto sucede, uno puede notar una entrada de registro en LogCat similar a esta:
W / ActivityManager: startActivity llamado desde finalizar ActivityRecord {4a19b47 u0 com.foo.bar/com.foo.bar.SplashActivity t4928 f}; forzando Intent.FLAG_ACTIVITY_NEW_TASK para: Intent {cmp = com.foo.bar / com.foo.bar.MainActivity}
Y este es el punto de inflexión a partir del cual (bajo algunas condiciones) las cosas pueden salir mal.
En resumen, si desea estar seguro (en lugar de experimentar efectos secundarios inesperados de que FLAG_ACTIVITY_NEW_TASKse agregue a la intención), entonces el orden debe ser:
Proyecto de demostración .
Grabaciones de pantalla: