等待UI线程完成。

4

我正在运行一个仪表活动测试。

在这个测试中,我需要在活动的一个UI元素中执行一些UI操作。

所以我要在活动的UI线程上像这样执行:

settingsActivity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        testSwitch.performClick();
    }
});

每次执行单击操作时,我都会遇到“can not perform this action after onSaveInstanceState”的错误。
下面是我尝试过的一些方法:
- 我已经尝试在代码后面加上Thread.sleep(),但并没有起作用。 - 在拆卸过程中,我没有结束活动。所以,我不知道Activity是如何被销毁的。
祝好, Saurav

正如错误所述,您正在尝试通过执行按钮点击与UI元素交互,但您的活动可能已暂停。 - hendrix
感谢smitalm的回复...但是我怎么知道活动已经暂停了呢? - saurav
1
做一些日志记录以了解发生了什么。例如,记录您的所有活动生命周期(onCreate、onResume、onStart、onPause、onStop、onDestroy...)。 - An-droid
我检查了活动的停止是否在 UI 元素点击之前被调用。我并没有完全完成这个活动。ActivityIntrumentationTest 是否会在一段时间后完成该活动? - saurav
1个回答

4

只需做一件事 不需要调用super()。 我认为这是在API Level > 11上的错误。

@Override
protected void onSaveInstanceState(Bundle outState) {
//No call for super(). Bug on API Level > 11.
}

如果您需要保存实例并向outState Bundle中添加内容,可以使用以下代码:

@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
super.onSaveInstanceState(outState);
}

希望这能解决你的问题。祝你好运 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接