android - 如何更好地在 Android 上对 Looper 和 Handler 代码进行单元测试?

标签 android multithreading unit-testing looper

我使用 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/

相关文章:

从 sqlite 读取值时出现 Android Stackoverflow 错误

php - PHP 扩展(在 C++ 中)函数中的 pthread_create 从不返回

c++ - 生产者-消费者模型

java - 如何在服务层测试Add方法?

unit-testing - 如何模拟/单元测试嵌套函数

unit-testing - 使用 TDD/BDD 开发 XSLT

java - 对于输入类型为密码的 EditText,ImeOptions 按钮不会更改

安卓扩展apk问题

android - WifiConfiguration 在 Lollipop 中启用网络

python - 确保 Celery 中不同来源的任务顺序