我在为自己的活动编写测试时遇到了一个问题,这使我对此问题感到疑惑。我正在使用ActivityInstrumentationTestCase2,并且当单击按钮并且它可以正常工作时,我的活动使用startService将意图发送到服务。(我的服务是singelton,所以我可以知道它是否正在运行)
在测试中,我正在执行以下操作:
听起来很简单,但是当我尝试使用Thread.sleep等待时,该服务将无法启动,与当我尝试进行繁忙的等待时相同。因此,我认为它将需要完成testMethod才能启动服务,并且我进行了以下设计:
Thread helper;
@Override
tearDown() {
if (helper) join helper
super.tearDown
}
testMethod() {
assert stuff
send intent
start helper
finish
}
helperMethod() {
wait for service to start
assert stuff
}
这实际上有效,我的猜测是它允许主线程完成testMethod,然后处理意图并完成我的测试。这种行为似乎很奇怪,因为我希望该服务将立即启动,因为它在同一线程上,或者休眠足够的时间会让该服务启动。因此,谁知道服务启动的条件是什么,何时启动?
服务在主线程上运行。因此,如果您拨打电话,Thread.sleep()
则直到时间到时才启动服务。
从服务文档http://developer.android.com/reference/android/app/Service.html
请注意,服务与其他应用程序对象一样,在其托管过程的主线程中运行。这意味着,如果您的服务要执行任何占用大量CPU资源(例如MP3播放)或阻塞(例如网络)的操作,则它应产生自己的线程来执行此工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句