La aplicación siempre comienza desde la actividad de root en lugar de reanudar el estado de fondo (Error conocido)


Me enfrento exactamente al 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 simple actividad de root con el LANZADOR y las intenciones PRINCIPALES y nada else. Comienzo otra actividad con has no flags ni nada extra en el manifiesto.

Lanzo la aplicación (root activity) y desde allí inicio la 2a actividad. Al presionar el botón de inicio, la tarea pasa al fondo. Al iniciar la aplicación de nuevo (desde el Lanzador o manteniendo presionado el botón de inicio para aplicaciones recientes) se inicia una nueva instancia de la actividad raíz en la parte superior de la pila existente.

Si presiono el botón atrás, la nueva actividad" root " se cierra y la antigua 2a actividad 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 hice el modo de lanzamiento de la actividad raíz singleTask. Ahora, cuando presiono inicio e inicie la aplicación nuevamente, borra las actividades por encima de la antigua tarea raíz y trae la antigua tarea raíz al primer plano en lugar de solo traer toda la tarea antigua con la 2a actividad en la parte superior al frente. Tenga en cuenta que la antigua tarea raíz todavía conserva su estado de aplicación, lo que significa que no era una nueva instancia, pero las actividades superiores habían sido asesinadas.

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.

Author: Monstieur, 2010-02-17

5 answers

Esto se debe a que los intentos que se usan para iniciar la aplicación son diferentes. Eclipse inicia una aplicación usando una intent sin acción ni categoría. El Lanzador inicia una aplicación usando una intent con Android.intención.acto.Acción principal y android.intención.categoría.Categoría de lanzador. El instalador inicia una aplicación con el android.intención.acto.Acción principal y sin categoría.

Quien haya enviado el error probablemente debería haberlo redactado como una solicitud de mejora para el complemento Eclipse ya que aparentemente quiero Eclipse tener la capacidad de pretender ser el lanzador y para iniciar aplicaciones con la misma intención que el lanzador.

 25
Author: Lance Nanek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-17 18:50:56
    @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... 
} 
 58
Author: Sachin Gurnani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-15 10:17:42

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 intentos...

 5
Author: toni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-09 08:46:10

Simplemente agregue esto en el método onCreate de su actividad de lanzador de esta manera:

      @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    if (!isTaskRoot()) {
        finish();
        return;
    }
    // other function
    }
 1
Author: Amal Kronz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-31 09:33:41

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;
                }
            }
 0
Author: CDrosos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-08 23:27:57