Android - 恢复上次查看的活动

五陵年少金市东,银鞍白马渡春风。这篇文章主要讲述Android - 恢复上次查看的活动相关的知识,希望能为你提供帮助。
我有3个不同的活动,用户之间没有特定的顺序导航。我的目标是双重的:

  1. 当用户在恢复应用时切换到其他内容时,即使应用已终止,我也希望从用户离开的位置开始
  2. 当最后一个活动恢复时,我想将它恢复到上次查看状态(这个我认为我对如何实现这个状态非常好)
我认为问题不是开始/停止 - 我几乎得到我需要的东西,但onCreate()如果应用程序被终止。在这种情况下 - 它选择我在清单中配置的Activity。我想我可以在onCreate()方法中放一些默认活动,但有没有更好的方法,我可能会错过?
答案如果您的应用尚未“终止”,那么#1应该已经工作,#2只需要将任何未自动管理的值保存到onSaveInstanceState()的Bundle中,然后在onRestoreInstanceState()中恢复它们。
这是一种黑客攻击,但我认为在应用程序实际终止的情况下,#1的最佳选择是在每个Activity类的onResume中保存最新的Activity,然后在第一次运行onCreate时你的第一个活动做了检查然后开始正确的活动...甚至可能在开始时放入一个空白的活动。像这样的东西:
家庭活动:
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中的活动,您可以使用它来重置您的值。
【Android - 恢复上次查看的活动】http://developer.android.com/guide/topics/fundamentals.html#actstate

    推荐阅读