我现在正尝试复活一个项目.

getMainLooper()发生异常…

我认为MainLooper初始化可能存在问题,并在此之前添加了Looper.prepareMainLoop().

异常告诉我,该对象已经存在一个循环播放器…

然后我尝试用Looper.myLooper()替换getMainLooper(),它起作用了…

但是我不明白为什么=)

实际上,我没有得到这两件事之间的区别.我认为在我的项目中使用getMainLooper()的地方,这是应用程序真正的主循环程序的最佳位置,但是我得到了我想要的.

请解释.

感谢您的关注

解决方法:

区别在于Looper.prepareMainLooper()在主UI线程中准备循环程序. Android应用程序通常不调用此功能.由于主线程在第一次活动,服务,提供者或广播接收者启动之前就已经准备好了其循环程序.

但是Looper.prepare()在当前线程中准备Looper.调用此函数后,线程可以调用Looper.loop()以开始使用Handlers处理消息.

因此,在您的情况下,您有两个线程-X和Y.X线程是主要的UI线程,它的弯针已由Android准备.在Y线程中并调用Looper.prepareMainLooper()时,您将尝试在X线程(主线程)中准备Looper.之所以失败,是因为X的弯针已经准备好了.但是,当您在Y线程中调用Looper.prepare()时,您实际上是在Y线程中准备Looper,因此可以调用Looper.loop().

标签:android,looper