Android - 恢复上次查看的活动
-
11-09-2019 - |
题
我有 3 个不同的活动,用户可以不按特定顺序在它们之间导航。我的目标有两个:
- 当用户在应用程序恢复时切换到其他内容时,即使应用程序被终止,我也想从用户离开的地方开始
- 当上次活动恢复时,我想将其恢复到上次查看的状态(我认为我对如何实现这一点有一个很好的想法)
我认为问题不在于 开始/停止 - 我几乎得到了我需要的东西,但是 onCreate()
如果应用程序被终止。在这种情况下 - 它会选择我在清单中配置的活动。我想我可以放点东西进去 onCreate()
该默认活动的方法,但有没有更好的方法我可能会错过?
解决方案
如果您的应用程序尚未“终止”,则#1应该已经可以工作,而#2只需要将未自动管理的任何值保存到Bundle中 onSaveInstanceState() 然后将它们恢复到 onRestoreInstanceState().
这是一种黑客行为,但我认为在应用程序实际终止的情况下,#1 的最佳选择是将最近的 Activity 保存在每个 Activity 类的 onResume 中,然后当您第一次运行 onCreate 时您的第一个活动进行检查,然后启动正确的活动...甚至可以在开始时放入一个空白的 Activity。像这样的东西:
开始活动:
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() 中恢复它。
其他提示
请记住, onSaveInstanceState() 不适用于长期状态,即用户关闭手机电源,然后在稍后的某个不确定时间点将其重新打开。如果您希望您的状态能够在电源周期中生存,您将需要创建自己的长期状态机制。
我相信您想要实现 onSaveInstanceState 并将您的活动当前状态存储在一个包中。该捆绑包将被传递到 onCreate 中的活动中,您可以使用它来重置您的值。
http://developer.android.com/guide/topics/fundamentals.html#actstate