android - servicio - La aplicación siempre comienza desde la actividad raíz en lugar de reanudar el estado de fondo(error conocido)
proceso de gestion de incidentes (4)
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/2d88391190be3303?tvc=2
Tengo una actividad de raíz simple con los intentos 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 pila 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.
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 ...
Esto se debe a los intentos que se utilizan para iniciar la aplicación siendo diferente. Eclipse inicia una aplicación con un intento sin acción y sin categoría. El Iniciador inicia una aplicación con un intento 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.
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;
}
}
@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...
}