La aplicación comienza siempre nueva de la actividad de la raíz en lugar de reanudar el estado de fondo (Bug conocido)
Estoy enfrentando exactamente el problema mencionado en estos acoplamientos:
Http://code.google.com/p/android/issues/detail?id=2373
- Android tarea matar
- Iniciar nuevo subproceso en Async Task
- ¿Cómo regresar a la última actividad lanzada al volver a iniciar la aplicación después de presionar HOME?
- Android empuja una nueva actividad mientras limpia a otros
- ¿Cómo manipulo la pila de actividades de Android?
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 simple de la raíz con las intenciones del LANZAMIENTO y PRINCIPALES y nada más . Comienzo otra actividad con no tiene banderas ni nada extra en el manifiesto.
Inicie la aplicación (actividad raíz) y desde allí iniciar la segunda actividad. Al pulsar el botón Inicio, la tarea pasa al fondo. Al iniciar de nuevo la aplicación (desde el Lanzador o desde el botón Inicio para aplicaciones recientes), se inicia una nueva instancia de la actividad raíz encima de la pila existente.
Si presiono el botón de retroceso, se cierra la nueva actividad de "raíz" y se ve la segunda actividad anterior, lo que significa que se inicia la actividad de raíz en la misma tarea en lugar de llevar la tarea al primer plano.
Para contrarrestar esto hice el modo de lanzamiento de la actividad de la raíz SingleTask . Ahora, cuando presiono en casa y vuelvo a lanzar la aplicación, borra las actividades por encima de la antigua tarea raíz y trae la tarea raíz antigua al primer plano en lugar de simplemente llevar toda la tarea antigua con la segunda actividad en la parte superior al frente. Tenga en cuenta que la antigua tarea raíz aún conserva su estado de aplicación, lo que significa que no era una nueva instancia, pero las actividades superiores habían sido eliminadas.
Incluso se produce en otras aplicaciones descargadas del mercado. El método de instalación manual no tiene ningún efecto para mí, todavía se lanza de la misma manera.
- Android, ¿cómo llevar una tarea al primer plano?
- App pierde su capacidad de recordar su pila cuando se inicia desde otra aplicación
- Manejar la instancia existente de actividad raíz al iniciar de nuevo la actividad raíz desde el filtro de intenciones
- Continuar tarea después de terminar todas las tareas
- Necesita un ejemplo que muestre cómo realizar solicitudes HTTP asíncronas
- ¿Diferencia entre OnlyOnRanToCompletion y NotOnFaulted?
- ¿Cómo funcionan los asesinos de tareas?
- Android: ¿Cómo hacer que el lanzador abra siempre la actividad principal en lugar de la actividad infantil? (o de otro modo)
Esto se debe a las intenciones que se utilizan para iniciar la aplicación es diferente. Eclipse inicia una aplicación con una intención sin acción y sin categoría. El Lanzador inicia una aplicación utilizando una intención 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.
Quienquiera que haya presentado el error debería haberlo redactado probablemente como una solicitud de mejora del complemento de Eclipse, ya que aparentemente desean que Eclipse tenga la capacidad de pretender ser el lanzador e iniciar aplicaciones con la misma intención que el lanzador.
@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.... }
EDIT: Tenía problemas con nuevas intenciones y notificaciones. La solución anterior no funciona con notificaciones e intenciones …
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; } }
- Cómo 'reiniciar' una aplicación de Android mediante programación
- ¿Puedo limitar el número de caracteres de TextView?