0

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);
 }          
4

1 に答える 1

1

考えられる理由は、一時停止状態のときにアプリが強制終了される可能性があるためです。次の例を見てください。

  1. onCreate - 5 に初期化
  2. ユーザーが 3 を選択
  3. ユーザーがアクティビティを終了、アクティビティを一時停止
  4. Android は、リソースが必要なためにアクティビティを削除します
  5. ユーザーがアクティビティに戻る
  6. onCreate が呼び出されます - 5 に初期化されます
  7. onResume が呼び出されます - 保存されたデータがあることを確認し、結果の値が 3 になります
于 2010-09-22T21:33:40.510 に答える