Si su aplicación no se ha "terminado" y luego # 1 ya debería trabajar y # 2 sólo requiere guardar los valores que no son administrados automagicamente en el paquete de onSaveInstanceState() luego restaurarlos en onRestoreInstanceState().
Esto es un truco, pero creo que su mejor opción para el n. ° 1 en el caso de que la aplicación realmente se termine sería guardar la Actividad más reciente en el onResume de cada una de sus clases de Actividad cuando la primera vez ejecute onCreate de su primera actividad, haga un control y luego inicie la Actividad correcta ... tal vez incluso ponga en blanco una Actividad al comienzo. Algo como esto:
startActivity:
public class StartActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get last open Activity
String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
if (last_activity == MyActivity2.getSimpleName()) {
startActivityForResult(new Intent(this, MyActivity2.class));
} else if (last_activity == MyActivity3.getSimpleName()) {
startActivityForResult(new Intent(this, MyActivity3.class));
} else {
// assume default activity
startActivityForResult(new Intent(this, MyActivity1.class));
}
}
public void onActivityResult() {
// kill the activity if they go "back" to here
finish();
}
}
Luego, en todas las otras actividades (MyActivity1,2,3) guardar los valores de este modo:
@Override
public void onResume() {
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
e.putString("last_activity", getClass().getSimpleName());
e.commit();
super.onResume();
}
También tendrá que manejar guardando/restaurando los datos para cada actividad manualmente. Puede guardar todos los valores que necesita en las preferencias dentro de onPause() de cada una de las Actividades y restaurarlas en onResume().
Gracias, fiXedd, no creo que sea un truco. Suena como un patrón de despachador. Solo esperaba que me estaba perdiendo algo y hay una forma más fácil de hacerlo. – Bostone
¿Qué tal comenzar startActivity y luego terminar() en lugar de startActivityForResult? –
También preste atención a la configuración de launchMode de su actividad en el manifiesto. Lo configuré en "singleTask" pero lo cambié a "singleTop" para permitir que se reanude correctamente la última actividad. Encontré una buena explicación en http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode –