2010-09-22 3 views
0

Я пытаюсь понять учебное руководство по тестированию активности на сайте Android. Один из тестов устанавливает spinner в примере SpinnerActivity, заставляет паузу, затем сбрасывает счетчик, заставляет возобновить, а затем проверяет правильность восстановления приложения. Я применил соответствующий код в нижней части этого вопроса для справки.Пример тестирования активности Android сбивает с толку OnPause Expectations

Я очень смущен, почему человек, написавший тест, считает, что счетчик мог быть поврежден между OnPause() и OnResume(). Это потому, что счетчик мог быть повторно использован в некоторой последующей деятельности и, таким образом, потерял свое состояние? Это единственное разумное объяснение, о котором я могу думать.

Я заинтересован в том, чтобы сохранить действия моего приложения, не связанные с виджетами, такие как строки, int и т. Д. Они инициализируются во время 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

Вероятная причина потому, что ваше приложение может быть убит, когда в приостановленное состояние. Возьмем такой пример:

  1. OnCreate - инициализирует до 5
  2. пользователь выбирает 3
  3. пользователь покидает активность, активность приостановлена ​​
  4. Android удаляет активность б/с она нуждается в ресурсах
  5. пользователь возвращается к деятельности
  6. onCreate вызывается - инициализируется до 5
  7. onResume вызывается - видно, что сохранены данные, значение результатов до 3
+0

Я думаю, что мое замешательство проистекает из того факта, что я ожидаю действия на шаге 7, описанные в шаге 6 внутри OnCreate(). Если действие было прекращено, OnResume() никогда не будет вызываться без предварительного вызова OnCreate(), правильно? Я не вижу значения в том, что этот типично ненужный контекст восстанавливает служебные данные в OnResume(), когда он может обрабатываться только в случае необходимости в OnCreate(). Я что-то не понимаю? –

+0

Вы правы, я не думаю, что нет причин, по которым вы не могли бы справиться с этим в onCreate. Однако вам нужно сохранить его в onPause. –

 Смежные вопросы

  • Нет связанных вопросов^_^