如果您的应用程序还没有被“终止”,那么#1应该已经工作,#2只需要保存没有被自动地管理到捆绑任何值onSaveInstanceState()然后onRestoreInstanceState()恢复它们。
这是一种破解,但我认为在应用程序实际被终止的情况下,您最好的选择是将最近的Activity保存在每个Activity类的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 2009-09-20 18:38:39
如何做startActivity,然后完成()而不是startActivityForResult? – 2011-08-20 19:06:42
还要注意清单中您的活动launchMode设置。我已将它设置为“singleTask”,但将其更改为“singleTop”以便正确恢复最后一次活动。我在http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode找到了一个很好的解释。 – 2012-12-14 12:02:15