Se l'applicazione non è stato "terminato" poi 1 # dovrebbe già lavorare e # 2 richiede solo salvare i valori che non sono gestiti automagicamente nel Bundle in onSaveInstanceState() poi ripristinarli nei onRestoreInstanceState().
Questo è un po 'un hack, ma penso che la tua migliore opzione per il # 1 nel caso in cui l'app venga effettivamente terminata sarebbe quella di salvare l'attività più recente nel campo onResume di ciascuna delle tue classi di attività, quando la prima volta esegui il onCreate della tua prima attività esegui un controllo, quindi avvia l'attività corretta ... magari anche inserendo un'attività vuota all'inizio. Qualcosa di simile a questo:
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();
}
}
Poi in tutte le altre attività (MyActivity1,2,3) Salvare i valori in questo modo:
@Override
public void onResume() {
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
e.putString("last_activity", getClass().getSimpleName());
e.commit();
super.onResume();
}
avrete anche per gestire salvataggio/ripristino manuale dei dati per ciascuna attività. È possibile salvare tutti i valori necessari nelle preferenze all'interno di onPause() di ciascuna attività, quindi ripristinarli nel menu onResume().
fonte
2009-09-20 08:19:38
Grazie fiXedd, non penso che questo sia un trucco. Sembra un modello di dispatcher. Speravo solo che mi mancasse qualcosa e che ci sia un modo più semplice per farlo. – Bostone
Che ne dici di startActivity e poi solo finish() invece di startActivityForResult? –
Prestare attenzione anche all'impostazione di avvio della propria attività nel manifest. L'ho impostato su "singleTask" ma l'ho cambiato in "singleTop" per consentire di riprendere correttamente l'ultima attività. Ho trovato una bella spiegazione su http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode –