Android サイトの Activity Testing チュートリアルを理解しようとしています。テストの 1 つは、SpinnerActivity の例でスピナーを設定し、強制的に一時停止してから、スピナーをリセットし、強制的に再開し、アプリケーションが状態を適切に復元したことを確認します。参照用に、この質問の下部に関連するコードを貼り付けました。
テストを書いている人が、スピナーが OnPause() と OnResume() の間で破損した可能性があると考えている理由を非常に混乱させています。これは、スピナーが後続のアクティビティで再利用され、その状態が失われた可能性があるためですか? それが私が考えることができる唯一の合理的な説明です。
Strings、ints など、アプリケーションのアクティビティの非ウィジェット メンバーを保持することを懸念しています。これらは OnCreate 中に初期化され、ユーザーによって変更されることはありません。その結果、OS が一時停止後にアクティビティを直接終了した場合でも、OnCreate() がこれらのメンバーを再初期化するため、OnPause 中にそれらを保存する理由はわかりません。
これらのウィジェット以外のメンバーが一時停止しても害を受けないと仮定しても安全でしょうか (アプリケーションが最終的に再開すると仮定しますか?)
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);
}