我现在正试图复兴一个项目。
getMainLooper() 出现异常...
我认为MainLooper初始化可能有问题,并在此之前添加了Looper.prepareMainLoop()。
异常告诉我该对象已经有一个循环器被抛出......
然后我尝试用 Looper.myLooper() 替换 getMainLooper() 并且它起作用了......
但我不明白为什么=)
事实上我不明白这两件事之间的区别。我认为在我的项目中使用 getMainLooper() 的地方,它是应用程序的真正主循环程序的最佳位置,但我得到了我得到的..
请解释。
感谢您的关注
不同之处在于Looper.prepareMainLooper()
在主 UI 线程中准备 Looper。 Android应用程序通常不会调用此函数。由于主线程在第一个活动、服务、提供者或广播接收器启动之前很久就准备好了循环程序。
But Looper.prepare()
准备Looper
在当前线程中。调用该函数后,线程可以调用Looper.loop()
开始处理消息Handler
s.
因此,在您的情况下,您有两个线程 - X 和 Y。X 线程是主 UI 线程,Android 已准备好其循环程序。当你在 Y 线程中并且你正在调用时Looper.prepareMainLooper()
您正在尝试在 X 线程(主线程)中准备循环程序。这失败了,因为 X 的循环器已经准备好了。但当你打电话时Looper.prepare()
在 Y 线程中,您实际上是在 Y 线程中准备循环程序,因此准备调用Looper.loop()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)