Android Activity 测试示例具有令人困惑的 OnPause 期望

Posted

技术标签:

【中文标题】Android Activity 测试示例具有令人困惑的 OnPause 期望【英文标题】:Android Activity Testing Example Has Confusing OnPause Expectations 【发布时间】:2010-09-22 20:58:22 【问题描述】:

我正在尝试了解 android 网站上的活动测试教程。其中一项测试在 SpinnerActivity 示例中设置了一个微调器,强制暂停,然后重置微调器,强制恢复,然后验证应用程序是否正确恢复了状态。我在这个问题的底部粘贴了相关代码以供参考。

我很困惑为什么编写测试的人认为微调器可能在 OnPause() 和 OnResume() 之间损坏。这是因为微调器可能已在某些后续活动中被重用并因此失去其状态?这是我能想到的唯一合理的解释。

我担心保留我的应用程序的活动非小部件成员,例如字符串、整数等。这些在 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】:

可能的原因是您的应用在暂停状态下可能会被终止。举个例子:

    onCreate - 初始化为 5 用户选择 3 用户离开活动,活动暂停 Android 删除活动 b/c 它需要资源 用户返回活动 onCreate 被调用 - 初始化为 5 onResume 被调用 - 看到有保存的数据,结果值为 3

【讨论】:

我认为我的困惑源于这样一个事实,即我希望在 OnCreate() 中的第 6 步中涵盖第 7 步的行为。如果活动被终止,在没有之前的 OnCreate() 调用的情况下永远不会调用 OnResume(),对吗?我看不到在 OnResume() 中产生这种通常不必要的上下文恢复开销的价值,只有在 OnCreate() 中需要时才能处理它。我是不是误会了什么? 你是对的,我认为你没有任何理由不能在 onCreate 中处理它。不过,您确实需要将其保存在 onPause 中。

以上是关于Android Activity 测试示例具有令人困惑的 OnPause 期望的主要内容,如果未能解决你的问题,请参考以下文章

Android Activity的4种启动模式详解(示例)

java Android Activity + onItemClicker(示例)

具有自定义行布局的 ListView - Android

具有多个 Activity 的 Android 导航抽屉

有关 Android12 中 Activity 生命周期的变化

有关 Android12 中 Activity 生命周期的变化