Android活动测试示例混淆了OnPause预期

时间:2010-09-22 20:58:23

标签: android unit-testing application-lifecycle

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

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

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

然后假设暂停时这些非小部件成员不会受到伤害(假设应用程序最终恢复?)是否安全?

 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);
 }          

1 个答案:

答案 0 :(得分:1)

可能的原因是因为您的应用在处于暂停状态时可能会被杀死。举个例子:

  1. onCreate - 初始化为5
  2. 用户选择3
  3. 用户离开活动,活动暂停
  4. Android删除需要资源的活动b / c
  5. 用户返回活动
  6. onCreate被调用 - 初始化为5
  7. onResume被调用 - 看到有保存的数据,结果值为3