Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何判断Android活动何时完成加载?_Android_View_Android Activity_Loaded - Fatal编程技术网

如何判断Android活动何时完成加载?

如何判断Android活动何时完成加载?,android,view,android-activity,loaded,Android,View,Android Activity,Loaded,我正在为我们的android应用程序开发一个自动化测试套件,在等待活动完全加载时遇到了麻烦。我可以调用getActivity,但仅仅因为它显示了我希望在测试中看到的活动,并不总是意味着该活动的组件已经准备好使用(完全加载)。查看ActivityAPI并没有发现任何问题,其他方法似乎过于侵入性,破坏了测试的初始状态。有人知道是否有办法询问应用程序或虚拟机是否加载了当前活动吗?如果您在测试用例扩展中创建了类似的setUp()方法ActivityInstrumentationTestCase2 您的活

我正在为我们的android应用程序开发一个自动化测试套件,在等待活动完全加载时遇到了麻烦。我可以调用getActivity,但仅仅因为它显示了我希望在测试中看到的活动,并不总是意味着该活动的组件已经准备好使用(完全加载)。查看ActivityAPI并没有发现任何问题,其他方法似乎过于侵入性,破坏了测试的初始状态。有人知道是否有办法询问应用程序或虚拟机是否加载了当前活动吗?

如果您在测试用例扩展中创建了类似的
setUp()
方法
ActivityInstrumentationTestCase2

您的活动将完全可操作并加载布局,在本例中,您可以访问视图及其内容

@SmallTest
public void testSimpleCreate() {
    final MyActivity activity = getActivity();
    assertNotNull(activity);

    assertNotNull(tv1);
    assertEquals("mystr1", tv1.getText().toString());
    assertNotNull(tv1);
    assertEquals("mystr2", tv2.getText().toString());
}
正如我在中提到的,在调用
setContentView()
早期的
onCreate()
之后,视图层次结构应该可以工作。我从来没有在任何活动或测试课上遇到过这样的问题


我不确定这对这种特定情况是否有任何帮助,但通常您可以通过调用来确定UI事件队列何时为空。这将一直阻止,直到没有更多的UI事件要处理。

上述建议是我问题的症结所在。我目前可以查询应用程序中的当前活动,但即使在当前活动与我正在等待的活动匹配之后,调用findViewById通常也会失败(似乎是因为尽管该活动位于活动堆栈的顶部,但并不是所有视图都已加载)。我们的直接解决方案是在测试代码中放置睡眠,但这也很脆弱,因为我们的睡眠有时不够困倦。尽管我确实在logcat日志中看到ActivityManager插话说给定的活动现在已“显示”。我不知道这是否意味着该活动现在已完全加载并准备好被滥用,但我也不知道如何以编程方式获取该信息。谢谢大家在这方面的帮助。如果在
setContentView()
之后,dtmilano在上面列出的示例中遗漏了什么(这不是第一次!),请告诉我,您的视图层次结构中的所有内容都应该可以访问。我想说唯一的例外是异步加载的视图,例如
ListView
的单个行绑定到数据源。我认为我们的问题在于toast元素会影响计时。您的第二个建议是我想进一步研究的内容,但它似乎需要我们从InstrumentationTestCase类进行扩展。有没有其他方法可以在不扩展您所知道的范围的情况下获得仪器的好处?您的祝酒词在哪里?目前您正在扩展什么类?我们的Toast主要通过匿名内部类从活动中调用,这些类实现了一个抽象的异步任务类,用于简单的错误/成功消息传递。我们的测试类是从一个父类扩展而来的,该父类从junit和hamcrest导入而不进行扩展,我想我们希望这样可以不固定它。不过,我看不到任何其他连接到检测功能的方法。如果有,请告诉我。否则,如果有另一种使用toast的方法可以防止它引起这个问题,那也很好。谢谢:)以异步方式调用Toast会导致任何问题,这似乎很奇怪。如果您没有扩展
AndroidTestCase
ActivityTestCase
,我根本不知道您是如何正确启动
活动的。你能不能用一段代码或其他什么来更新你的问题?祝酒似乎每次都要花不同的时间,尽管这可能不是描述那里发生了什么的最好方式。他们似乎以不可预测的方式集中注意力,但我需要更多地了解他们。我们的测试设置有点不同。我们有单元测试和所谓的故事测试。由于我们不想在应用程序中部署故事测试,但希望能够执行功能流的黑盒测试,因此我们创建了一种通过命令设置对其进行远程控制的方法。它工作得很好,除了这个时间问题:(我将查看检测代码以寻找线索。
@SmallTest
public void testSimpleCreate() {
    final MyActivity activity = getActivity();
    assertNotNull(activity);

    assertNotNull(tv1);
    assertEquals("mystr1", tv1.getText().toString());
    assertNotNull(tv1);
    assertEquals("mystr2", tv2.getText().toString());
}