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 期望的主要内容,如果未能解决你的问题,请参考以下文章
java Android Activity + onItemClicker(示例)