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

les*_*hka 1 android looper

我现在正试图复活一个项目.getMainLooper()上有一个例外...

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

异常告诉我,已经有一个针对该对象的looper被抛出......

然后我尝试用Looper.myLooper()替换getMainLooper()并且它有效...

但我不明白为什么=)

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

请解释.

感谢您的关注

ina*_*ruk 10

区别在于Looper.prepareMainLooper()在主UI线程中准备looper.Android应用程序通常不会调用此函数.由于主要线程在第一次活动之前很久就准备好了looper,因此启动了服务,提供者或广播接收者.

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

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