Я пытаюсь понять учебное руководство по тестированию активности на сайте 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);
}
Я думаю, что мое замешательство проистекает из того факта, что я ожидаю действия на шаге 7, описанные в шаге 6 внутри OnCreate(). Если действие было прекращено, OnResume() никогда не будет вызываться без предварительного вызова OnCreate(), правильно? Я не вижу значения в том, что этот типично ненужный контекст восстанавливает служебные данные в OnResume(), когда он может обрабатываться только в случае необходимости в OnCreate(). Я что-то не понимаю? –
Вы правы, я не думаю, что нет причин, по которым вы не могли бы справиться с этим в onCreate. Однако вам нужно сохранить его в onPause. –