我使用 android.os.Handler 类在后台执行任务。当对这些进行单元测试时,我调用 Looper.loop()
让测试线程等待后台任务线程完成它的工作。稍后,我调用 Looper.myLooper().quit()
(也在测试线程中),让测试线程退出 loop
并恢复测试逻辑。
在我想编写不止一种测试方法之前,一切都很好。
问题是 Looper 的设计似乎不允许在同一个线程上退出和重新启动,所以我不得不在一个测试方法中进行所有测试。
我查看了 Looper 的源代码,但找不到解决方法。
还有其他方法可以测试我的 Hander/Looper 代码吗?或者可能是一些更测试友好的方式来编写我的后台任务类?
最佳答案
Looper 的源代码显示 Looper.myLooper().quit() 在消息队列中加入了一条空消息,这告诉 Looper 它已经完成了对消息的处理。本质上,该线程在那时变成了死线程,据我所知没有办法恢复它。尝试将消息发布到 调用 quit() 后的处理程序以达到“试图向死线程发送消息”的效果。就是这个意思。
关于android - 如何更好地在 Android 上对 Looper 和 Handler 代码进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655987/