gpt4 book ai didi

Android:getMainLooper() 和 Looper.myLooper() 之间的区别

转载 作者:行者123 更新时间:2023-11-29 14:25:36 24 4
gpt4 key购买 nike

我现在正在尝试恢复一个项目。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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com