La aplicación siempre comienza desde la actividad raíz en lugar de reanudar el estado de fondo (error conocido)

Estoy enfrentando exactamente el problema mencionado en estos enlaces:

http://code.google.com/p/android/issues/detail?id=2373

http://groups.google.com/group/android-developers/browse_thread/thread/77aedf6c7daea2ae/da073056831fd8f3?#da073056831fd8f3

http://groups.google.com/group/android-developers/browse_thread/thread/2d88391190be3303?tvc=2

Tengo una actividad de raíz simple con los bashs LAUNCHER y MAIN y nada más . Comienzo otra actividad sin banderas ni nada extra en el manifiesto.

Lanzo la aplicación (actividad raíz) y de allí comienzo la 2da actividad. Al presionar el botón Inicio, la tarea pasa al segundo plano. Al volver a iniciar la aplicación (desde el Iniciador o al mantener presionado el botón de Inicio para las aplicaciones recientes) se inicia una nueva instancia de la actividad de la raíz en la parte superior de la stack existente.

Si presiono el botón Atrás, la nueva actividad “raíz” se cierra y la segunda actividad anterior es visible, lo que significa que inicia la actividad raíz en la misma tarea en lugar de llevar la tarea al primer plano.

Para contrarrestar esto, realicé el modo de inicio de la actividad raíz SingleTask . Ahora cuando presiono inicio y vuelvo a iniciar la aplicación, borra las actividades que están por encima de la anterior tarea raíz y pone la anterior tarea raíz en primer plano, en lugar de poner toda la tarea antigua con la segunda actividad en la parte superior al frente. Tenga en cuenta que la tarea raíz anterior aún conserva su estado de aplicación, lo que significa que no era una instancia nueva, sino que las actividades superiores habían sido eliminadas.

Incluso ocurre en otras aplicaciones descargadas del mercado. El método de instalación manual no tiene ningún efecto para mí, todavía se inicia de la misma manera.

Esto se debe a los bashs que se utilizan para iniciar la aplicación siendo diferente. Eclipse inicia una aplicación con un bash sin acción y sin categoría. El Iniciador inicia una aplicación con un bash con la acción android.intent.action.MAIN y la categoría android.intent.category.LAUNCHER. El instalador inicia una aplicación con la acción android.intent.action.MAIN y sin categoría.

Quien haya enviado el error probablemente lo haya redactado como una solicitud de mejora del complemento Eclipse, ya que aparentemente quieren que Eclipse tenga la capacidad de fingir ser el iniciador y de iniciar aplicaciones con la misma intención que el iniciador.

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { // Activity was brought to front and not created, // Thus finishing this will get us to the last viewed activity finish(); return; } // Regular activity creation code... } 

Aquí está la solución:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 & getIntent().getExtras() == null) { finish(); return; } Your code.... } 

EDITAR: tuve problemas con nuevas intenciones y notificaciones. La solución anterior no funciona con notificaciones e intenciones …

Simplemente agregue esto en el método Crear de su actividad de inicio de esta manera:

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); if (!isTaskRoot()) { finish(); return; } // other function } 

Solución similar para Xamarin.Android:

 if (!IsTaskRoot) { string action = this.Intent.Action; if (this.Intent.HasCategory(Intent.CategoryLauncher) && !string.IsNullOrEmpty(this.Intent.Action) && action == Intent.ActionMain) { Finish(); return; } }