Java 是否根据工作线程事件将UI线程与调度视图状态同步?

Java 是否根据工作线程事件将UI线程与调度视图状态同步?,java,android,multithreading,android-testing,ui-thread,Java,Android,Multithreading,Android Testing,Ui Thread,上面有一个活动和一个按钮。任务是通过白盒测试,了解“按钮点击->按钮消失->活动暂停->活动恢复”对按钮可视性状态的影响 简单的实现会导致不一致的活动状态,从而导致错误的测试输出: // worker thread TouchUtils.clickView(this, mButton); ... // ui thread instrumentation.callActivityOnStop(mActivity); instrumentation.callActivityOnResume(mAct

上面有一个活动和一个按钮。任务是通过白盒测试,了解“按钮点击->按钮消失->活动暂停->活动恢复”对按钮可视性状态的影响

简单的实现会导致不一致的活动状态,从而导致错误的测试输出:

// worker thread
TouchUtils.clickView(this, mButton);
...
// ui thread
instrumentation.callActivityOnStop(mActivity);
instrumentation.callActivityOnResume(mActivity);
assertTrue(View.GONE == mButton.getVisibility());
有两种glympse方法没有成功:

1) 然而,在执行
TouchUtils.clickView()
之后为主线程添加睡眠并不能完全解决问题,而是会增加对经验UI超时持续时间的依赖性

2) 通过AsyncTask中的
onPostExecute()
同步触摸事件和随后的活动生命周期事件调用,会导致测试意外失败


是否有任何常规的或至少可行的解决方案用于worker ui同步,或专门为Android测试框架设计的解决方案?

必须使用Instrumentation中的
runOnMainSync()
。类用于通过Android测试框架Instrumentation同步ui和worker线程事件:

// worker thread
TouchUtils.clickView(this, mButton);
instrumentation.runOnMainSync(new Runnable() {
    @Override
    public void run() {
        instrumentation.callActivityOnStop(mActivity);
        instrumentation.callActivityOnResume(mActivity);
        assertTrue(View.GONE == mButton.getVisibility());
    }
});
但是,如果有任何其他建议或一般(与Android测试框架无关)指导方针,欢迎回答

注意:官方文档中描述了更多与主线程同步的专用工具