あなたのアプリが「終了」されていない場合は、#1が既に動作するはずと#2はちょうどonRestoreInstanceState()でそれらを復元し、その後onSaveInstanceState()にバンドルに自動的に管理されていない任意の値を保存が必要です。
これはちょっとしたハックですが、アプリの実際に終了した場合の#1の最適なオプションは、最新のアクティビティを各アクティビティクラスのonResumeに保存することですあなたの最初のアクティビティのonCreateを実行し、チェックしてから正しいアクティビティを開始してください...最初は空白のアクティビティに入れてください。
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();
}
}
そして、他のすべての活動(MyActivity1,2,3)にそのような値を保存します。このような何か
@Override
public void onResume() {
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
e.putString("last_activity", getClass().getSimpleName());
e.commit();
super.onResume();
}
あなたはまた、処理する必要があります各アクティビティのデータを手動で保存/復元します。必要なすべての値を、各アクティビティのonPause()内の設定に保存してから、onResume()でリストアすることができます。
ありがとうfiXedd、私はこれがハックだとは思わない。ディスパッチャパターンのように聞こえます。私は何かが不足していることを望んでいましたし、これをやるより簡単な方法があります。 – Bostone
startActivityForResultの代わりにstartActivityを実行してからfinish()を実行するのはどうですか? –
マニフェストのlaunchMode設定にも注意してください。私は "singleTask"に設定しましたが、最後のアクティビティを正しく再開させるために "singleTop"に変更しました。私はhttp://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmodeで素敵な説明を見つけました –