- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我现在正在尝试恢复一个项目。getMainLooper() 发生异常...
我认为可能是 MainLooper 初始化有问题,在这之前添加了 Looper.prepareMainLoop()。
异常告诉我已经抛出了该对象的循环器...
然后我尝试用 Looper.myLooper() 替换 getMainLooper() 并且成功了...
但是没看懂为什么=)
事实上,我不明白这两者之间的区别。我认为在我的项目中使用 getMainLooper() 的地方是应用程序真正的主循环器的最佳位置,但我得到了我得到的..
请解释。
感谢您的关注
最佳答案
区别在于 Looper.prepareMainLooper()
在主 UI 线程中准备循环器。 Android 应用程序通常不会调用此函数。由于主线程在第一个 Activity 、服务、提供者或广播接收器启动之前很久就准备好了它的循环程序。
但是 Looper.prepare()
在当前线程中准备 Looper
。调用此函数后,线程可以调用Looper.loop()
开始使用Handler
处理消息。
因此,在您的情况下,您有两个线程 - X 和 Y。X 线程是主 UI 线程,其循环程序已由 Android 准备好。当您在 Y 线程中并调用 Looper.prepareMainLooper()
时,您正在尝试在 X 线程(主线程)中准备循环程序。这失败了,因为 X 的 looper 已经准备好了。但是当你在 Y 线程中调用 Looper.prepare()
时,你实际上是在 Y 线程中准备 looper,因此准备好调用 Looper.loop()
。
关于Android:getMainLooper() 和 Looper.myLooper() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766002/
我知道我的做法可能有点倒退,但还没有找到合适的解决方案,这是我最接近的解决方案。我首先向用户呈现登录 View ,并将输入的凭据提交到 Web 服务,该服务验证凭据并在登录成功时返回 HTTP 200
只是澄清一下,但是在主线程上的 Android Activity 中,如果我调用 Looper.myLooper() 与 Looper.getMainLooper() 返回相同的引用,对吗?他们是一样
我现在正在尝试恢复一个项目。getMainLooper() 发生异常... 我认为可能是 MainLooper 初始化有问题,在这之前添加了 Looper.prepareMainLoop()。 异常告
我想在 JUnit 中对协程进行一些测试,但我遇到了一些问题。代码很简单: @Test fun coroutineTest() { //runBlocking(Unconfined) does
我浏览了官方文档,但我似乎找不到 new Handler() 之间是否有任何区别和new Handler(Looper.myLooper()) new Handler() Default constr
当我尝试使用协程在 kotlin 中测试我的 ViewModel 时,出现 Method myLooper in android.os.Looper not mocked 错误。 有 View 模型
我是一名优秀的程序员,十分优秀!