2010-09-22 60 views
0

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

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

我很关心保留我的应用程序的活动非小部件成员,如字符串,整数等。这些在OnCreate中初始化并且不会被用户更改。因此,我认为没有理由在OnPause期间将其保存,因为即使OS在暂停后直接终止活动,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

可能的原因是因为你的应用程序可以在时被杀暂停状态。借此例如:

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

我认为我的困惑源自于我期望在OnCreate()内的步骤6中涵盖的第7步的行为。如果活动已终止,OnResume()将不会在没有事先OnCreate()调用的情况下调用,对吧?在OnResume()中,当它只能在OnCreate()需要处理时,我看不到在OnResume()中产生这种通常不必要的上下文恢复开销的价值。我误解了什么吗? – 2010-09-23 15:33:33

+0

你说得对,我不认为你有任何理由不能在onCreate中处理。尽管如此,你确实需要将它保存在onPause中。 – 2010-09-23 16:02:47