9

我有 3 个不同的活动,用户可以在没有特定顺序的情况下导航。我的目标是双重的:

  1. 当用户在应用程序恢复时切换到其他东西时,即使应用程序被终止,我也想从用户离开的地方开始
  2. 当最后一个活动恢复时,我想将其恢复到最后查看的状态(这个我认为我对如何实现有一个很好的想法)

我认为问题不在于启动/停止- 我几乎可以得到我需要的东西,但onCreate()如果应用程序被终止。在这种情况下 - 它会选择我在清单中配置的 Activity。我想我可以在onCreate()默认活动的方法中添加一些东西,但是有没有更好的方法我可能会丢失?

4

3 回答 3

6

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

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

于 2009-09-20T08:19:38.920 回答
1

Keep in mind that onSaveInstanceState() isn't workable for long-term state, i.e. the user powers the phone down and then turns it back on at an indeterminate point later. You will need to create your own long-term state mechanism if you wish for your state to survive power cycles.

于 2009-09-21T15:20:41.223 回答
0

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

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

于 2009-09-20T01:59:57.520 回答