¿Es posible configurar una aplicación de Android para que si un usuario abre su aplicación, inicia numerosas actividades, luego regresa a la pantalla de inicio y vuelve a lanzar su aplicación, en lugar de dirigirse a la actividad principal, en su lugar será llevado al actividad más alta en la pila (la actividad más reciente en su aplicación)?¿Cómo hacer que una aplicación de Android regrese a la última actividad abierta cuando se vuelve a lanzar?
Respuesta
Cuando se inicia mediante un icono en la pantalla de inicio, Android siempre iniciará la actividad con el filtro android.intent.action.MAIN
en su AndroidManifest.xml
, a menos que la aplicación ya esté en ejecución (en cuyo caso obviamente restaurará la actividad en la parte superior de la pila).
Para lograr lo que usted describe se puede almacenar simplemente la última actividad visible en SharedPreferences
y tienen una actividadDispatcher que se inicia la última actividad en función de las preferencias.
Así que en cada actividad que desea volver a iniciar de forma automática:
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}
Y un actividad Dispatcher similar a los siguientes:
public class Dispatcher extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Class<?> activityClass;
try {
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
activityClass = Class.forName(
prefs.getString("lastActivity", Activity1.class.getName()));
} catch(ClassNotFoundException ex) {
activityClass = Activity1.class;
}
startActivity(new Intent(this, activityClass));
}
}
Observaciones
- Usted podría crear una clase base para anular
- El actividad Dispatcher, obviamente, tiene que ser la acción
android.intent.action.MAIN
Gracias por esto. He visto otras respuestas que ahora me dicen que lo que estoy buscando es realmente el comportamiento predeterminado y que solo estaba el hecho de que estaba usando eclipse (y aún no se actualizó a 0.9.6 del complemento) que causaba mi problema. Entonces, creo que no tengo que incorporar su solución. ¿Es eso correcto? ¿O hay otra razón por la que necesitaría seguir tu idea de manera programática? – JohnRock
@johnrock: Android crea una pila que se usa para encontrar la última actividad visible * mientras tu aplicación se está ejecutando *. Desafortunadamente, nunca se sabe cuándo se mata su aplicación, por lo que si * siempre * desea restaurar la última actividad (incluso bajo presión de memoria, después del reinicio, etc.), entonces necesita algo similar a lo que propuse. Si estás de acuerdo * la mayor parte del tiempo *, no lo haces. –
Hola, solo quería agregar que el comportamiento previsto no funciona, como se supone, ni siquiera "la mayoría de las veces". He descrito el problema aquí http://stackoverflow.com/questions/6903761/after-home-button-press-re-launching-app-shows-intial-activity-not-current/6903958#6903958 –
Este es el comportamiento predeterminado y esta pregunta se ha hecho varias veces antes: Android: keep task's activity stack after restart from HOME
Android Run application from last Activity
Nota que si está lanzando su aplicación desde Eclipse, eso es lo que rompe esta funcionalidad predeterminada. Cambiar la configuración de inicio para iniciar ninguna actividad debería arreglar las cosas.
Sin embargo, como este comportamiento se fijó en el 0.9.6 release del ADT plugin para Eclipse en las últimas semanas, ya no es necesario que la solución:
Aplicaciones lanzado desde ADT ahora se comportan como si se ha hecho clic desde la pantalla de inicio.
Ese es solo el caso * cuando la aplicación ya se está ejecutando *. Como nunca se puede saber, yo mismo lo manejaría. Edité mi respuesta para aclarar. –
No es tan complejo. Solo necesitas manipular el manifiesto.
AndroidManifest.XM
<activity
android:name=".MainActivity"
android:alwaysRetainTaskState="true"
android:exported="true"
.
.
.
Lea sobre el 'android: exportada' & 'android: alwaysRetainTaskState' aquí:
- 1. Android: Regrese a la actividad anterior sin llamar a finish()
- 2. Perder extras Intención cuando regrese a la actividad
- 3. Aplicación Android Run de la última actividad
- 4. Si se detiene una actividad, se vuelve a crear lo que se pasa a getIntent()
- 5. Android - restaurar la última actividad que se ha visto
- 6. Android se bloquea cuando la aplicación se cierra y se vuelve a abrir
- 7. ¿Cómo encontrar la última actividad desde la cual se abre la actividad actual en android?
- 8. Lanzar una excepción personalizada de un servicio a una actividad
- 9. cuando el iframe se vuelve a cargar?
- 10. ¿Por qué CLR vuelve a lanzar ThreadAbortException?
- 11. Android: la orientación de la pantalla vuelve a cargar la actividad
- 12. cómo hacer que la función de visualización de smarty regrese a una variable
- 13. ¿Cómo almacenar en caché y conservar la última página visitada en una aplicación jQuery Mobile, cuando se vuelve a abrir desde la pantalla de inicio del iPhone?
- 14. Lanzar una actividad basada en un archivo en android
- 15. Android: lanzar una preferencia personalizada desde una actividad de preferencia
- 16. Cómo hacer una actualización de una página web cuando el usuario se vuelve móvil al paisaje
- 17. Cómo hacer que la aplicación de Android se actualice automáticamente
- 18. ¿Cómo se descompila, se edita en eclipse y se vuelve a compilar una aplicación? ¿Paso a paso?
- 19. ¿Barra de notificaciones de Android abre la última actividad activa?
- 20. ¿Cómo hacer que una aplicación se ejecute continuamente en Android?
- 21. Android - Detener AsyncTask cuando se presiona el botón Atrás y volver a la Actividad anterior
- 22. Android: ¿cómo vas a otra actividad al hacer clic?
- 23. Android - La actividad incorrecta a veces comienza
- 24. última ventana abierta por window.open
- 25. Usar la cámara del teléfono a través de la intención: ¿la actividad nunca vuelve?
- 26. Android - cambie a la actividad sin reiniciarlo
- 27. La actividad de la cámara Android no regresa a mi aplicación cuando se presiona el botón Aceptar
- 28. ¿Hacer ping a una URL cuando se bloquea la aplicación IOS?
- 29. ¿Qué sucede cuando una actividad de Android inicia otra actividad?
- 30. getLastKnownLocation() Android, cuando se actualiza la última ubicación conocida?
solución mejor y más limpia: http://stackoverflow.com/ a/10598619/5494342 – Mo12
Para el registro, el comentario anterior es discutible. También podría decir que la respuesta en ese enlace es poco elegante aunque posiblemente aceptable, y viene con el inconveniente de que no funcionará el 100% del tiempo. Vea los comentarios en la respuesta aceptada de esta pregunta antes de decidir qué solución funciona para su situación. – Donamite