Android - 恢复上次查看的活动

时间:2009-09-20 01:25:16

标签: android android-activity android-activitymanager

我有3个不同的活动,用户之间没有特定的顺序导航。我的目标是双重的:

  1. 当用户在恢复应用时切换到其他内容时,即使应用已终止,我也想从用户离开的地方开始
  2. 当我恢复上次活动时,我想将其恢复到上次查看的状态(这个我认为我对如何实现这个状态非常了解)
  3. 我认为问题不是开始/停止 - 我几乎得到了我需要的东西,但onCreate()如果应用已被终止。在这种情况下 - 它选择我在清单中配置的Activity。我想我可以在默认活动的onCreate()方法中加入一些东西但是有更好的方法可能会丢失吗?

3 个答案:

答案 0 :(得分:6)

如果您的应用尚未“终止”,那么#1应该已经工作,而#2只需要将未经自动管理的任何值保存到onSaveInstanceState()中的Bundle中,然后在{{3}中恢复它们}。

这是一种黑客攻击,但我认为在应用程序实际终止的情况下,#1的最佳选择是在每个Activity类的onResume中保存最新的Activity,然后在第一次运行时你的第一个活动的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()中恢复它。

答案 1 :(得分:1)

请记住,onSaveInstanceState()对于长期状态是不可行的,即用户打开电话然后在不确定的时间点将其重新打开。如果您希望您的州能够在电力循环中存活,您将需要创建自己的长期状态机制。

答案 2 :(得分:0)

我相信您希望实现onSaveInstanceState,并将您的活动当前状态存储在一个包中。该捆绑包将被传递到onCreate中的活动中,您可以使用它来重置您的值。

http://developer.android.com/guide/topics/fundamentals.html#actstate