Aplicación se inicia siempre fresco de actividad de las raíces en lugar de reanudar el estado de fondo (Error conocido)

StackOverflow https://stackoverflow.com/questions/2280361

Pregunta

Estoy frente a exactamente el problema mencionado en estos enlaces:

http://code.google.com/p/android/ temas / detalle? id = 2373

http://groups.google.com / grupo / android-desarrolladores / browse_thread / hilo / 77aedf6c7daea2ae / da073056831fd8f3? # da073056831fd8f3

http://groups.google.com/ grupo / android-desarrolladores / browse_thread / hilo / 2d88391190be3303? TVC = 2

Tengo una actividad de la raíz simple con el lanzador y las intenciones MAIN y otra cosa . Puedo empezar con otra actividad tiene banderas ni nada extra en el manifiesto de ningún tipo.

Me inicie la aplicación (actividad de la raíz) y desde allí empezar la segunda actividad. Al pulsar el botón de inicio de la tarea pasa a un segundo plano. En el lanzamiento de la aplicación de nuevo (de lanzador o de ocupar el botón 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 de retroceso, la nueva actividad "raíz" se cierra y el viejo segunda actividad es visible, lo que significa que su lanzamiento de la actividad de la raíz en la misma tarea en lugar de llevar la tarea a primer plano.

Para contrarrestar este modo hice el lanzamiento de la actividad de la raíz singleTask . Ahora cuando pulso el hogar y poner en marcha la aplicación de nuevo, borra las actividades arriba mencionadas la tarea raíz antigua y trae la vieja tarea de raíz al primer plano en lugar de simplemente presentar toda la tarea de edad con la segunda actividad en la parte superior a la parte delantera. Tenga en cuenta que la tarea de la raíz de edad aún conserva su estado de la aplicación, lo que significa que no era una nueva instancia, pero los las actividades de mayor había muerto.

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

¿Fue útil?

Solución

Esto es debido a los intentos que se utilizan para iniciar la aplicación de ser diferente. Eclipse se inicia una aplicación utilizando una intención sin acción y sin categoría. El lanzador inicia una aplicación utilizando una intención con la acción y la categoría android.intent.action.MAIN android.intent.category.LAUNCHER. El instalador se inicia una aplicación con la acción android.intent.action.MAIN y ninguna categoría.

El que remite el fallo debería haber probablemente redactado como una petición de mejora para el plug-in de Eclipse ya que al parecer quieren Eclipse para tener la capacidad de fingir ser el lanzador y para iniciar aplicaciones usando la misma intención que el lanzador.

Otros consejos

    @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: he tenido problemas con los nuevos intentos y notificaciones. La solución anterior no funciona con las notificaciones y las intenciones ...

Sólo tiene que añadir esto en el método onCreate de su actividad lanzador de la siguiente 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;
                }
            }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top