質問

Androidサイトのアクティビティテストチュートリアルを理解しようとしています。テストの1つは、スピナーアクティブの例にスピナーを設定し、一時停止を強制し、スピナーをリセットし、履歴書を強制し、アプリケーションが状態を適切に復元したことを確認します。参照のために、この質問の下部に関連するコードを貼り付けました。

テストを書いている人が、スピナーがonpause()とonresume()の間で破損している可能性があると考える理由は非常に混乱しています。これは、スピナーがその後の活動で再利用され、そのために状態を失った可能性があるためですか?それは私が考えることができる唯一の合理的な説明です。

私は、文字列やINTなどのアプリケーションのアクティビティ以外のメンバーを保存することを心配しています。これらはOnCreate中に初期化され、ユーザーによって変更されません。その結果、OSが一時停止後にアクティビティを直接終了したとしても、OnCreate()がこれらのメンバーを再発明するため、ONが途中でそれらを救う理由はありません。

これらの非widgetメンバーは、一時停止するときに害を受けないと仮定するのは安全ですか(アプリケーションが最終的に再開されると仮定しますか?)

 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. OnCreate- 5に初期化
  2. ユーザーは3を選択します
  3. ユーザーはアクティビティを去り、アクティビティが一時停止します
  4. Androidはアクティビティb/cリソースが必要です
  5. ユーザーはアクティビティに戻ります
  6. OnCreateは5に初期化されます
  7. Onresumeは呼ばれます - データが保存されていることを確認し、結果値は3に
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top