2010-09-22 25 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