Android活动测试示例的预期令人困惑

Android活动测试示例的预期令人困惑,android,unit-testing,application-lifecycle,Android,Unit Testing,Application Lifecycle,我试图理解Android站点上的活动测试教程。其中一个测试在SpinnActivity示例中设置微调器,强制暂停,然后重置微调器,强制恢复,然后验证应用程序是否正确恢复了状态。我在这个问题的底部粘贴了相关代码以供参考 我非常困惑,为什么编写测试的人认为旋转器可能在OnPause()和OnResume()之间损坏。这是因为微调器可能已在某些后续活动中重用,从而失去其状态吗?这是我能想到的唯一合理的解释 我关心的是保留我的应用程序的非小部件成员的活动,如字符串、int等。这些活动在OnCreate期

我试图理解Android站点上的活动测试教程。其中一个测试在SpinnActivity示例中设置微调器,强制暂停,然后重置微调器,强制恢复,然后验证应用程序是否正确恢复了状态。我在这个问题的底部粘贴了相关代码以供参考

我非常困惑,为什么编写测试的人认为旋转器可能在OnPause()和OnResume()之间损坏。这是因为微调器可能已在某些后续活动中重用,从而失去其状态吗?这是我能想到的唯一合理的解释

我关心的是保留我的应用程序的非小部件成员的活动,如字符串、int等。这些活动在OnCreate期间初始化,用户不会更改。因此,我看不出有任何理由在OnPause期间保存它们,因为即使操作系统在暂停后直接终止活动,OnCreate()也会重新初始化这些成员

那么,假设这些非小部件成员在暂停时不会受到伤害(假设应用程序最终恢复)安全吗


可能的原因是,当你的应用程序处于暂停状态时,它可能会被终止。举个例子:

  • onCreate-初始化为5
  • 用户选择3
  • 用户离开活动,活动已暂停
  • Android删除活动b/c它需要资源
  • 用户返回活动
  • onCreate被调用-初始化为5
  • 调用onResume-查看是否保存了数据,结果值为3

  • 我认为我的困惑源于这样一个事实,即我希望在OnCreate()中看到步骤6中包含的步骤7的行为。如果活动被终止,在没有先前的OnCreate()调用的情况下,永远不会调用OnResume(),对吗?在OnResume()中产生这种通常不必要的上下文恢复开销,而只有在OnCreate()中需要时才能处理它,我看不出这有什么价值。我有什么误解吗?你是对的,我不认为你有任何理由不能在onCreate中处理这件事。不过,您确实需要将其保存在onPause中。
     public void testStatePause() {
        Instrumentation mInstr = this.getInstrumentation();
        mActivity.setSpinnerPosition(TEST_STATE_PAUSE_POSITION);
        mActivity.setSpinnerSelection(TEST_STATE_PAUSE_SELECTION);
        mInstr.callActivityOnPause(mActivity);          
        mActivity.setSpinnerPosition(0);
        mActivity.setSpinnerSelection("");
        mInstr.callActivityOnResume(mActivity);
        int currentPosition = mActivity.getSpinnerPosition();
        String currentSelection = mActivity.getSpinnerSelection();
        assertEquals(TEST_STATE_PAUSE_POSITION,currentPosition);
        assertEquals(TEST_STATE_PAUSE_SELECTION,currentSelection);
     }