我有三个不同的活动,用户导航之间没有特定的顺序。我的目标是双重的:
我认为问题不在于start/stop --在那里,我几乎可以得到我所需要的东西,但是如果应用程序被终止,则是onCreate()。在这种情况下,它会选择我在清单中配置的活动。我想我可以在默认活动的onCreate()方法中添加一些东西,但是还有更好的方法吗?
发布于 2009-09-20 08:19:38
如果你的应用程序还没有被“终止”,那么#1应该已经工作了,而#2只需要将任何不是自动管理的值保存到onSaveInstanceState()中的Bundle中,然后在onRestoreInstanceState()中恢复它们。
这是一种黑客行为,但我认为在应用程序实际终止的情况下,第一种最佳选择是在每个活动类的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();
}您还必须手动处理保存每个活动的数据的/restoring。您可以将所需的所有值保存到每个活动的onPause()内的首选项中,然后在onResume()中恢复它。
发布于 2009-09-21 15:20:41
请记住,onSaveInstanceState()在长期状态下是不可行的,即用户关闭电话,然后在不确定的点将其打开。如果你希望你的状态能在能量循环中生存,你需要创建你自己的长期状态机制。
发布于 2009-09-20 01:59:57
我相信您希望实现onSaveInstanceState,这将将您的活动当前状态存储在一个包中。该包将被传递到onCreate中的活动中,您可以使用它来重置值。
http://developer.android.com/guide/topics/fundamentals.html#actstate
https://stackoverflow.com/questions/1450019
复制相似问题