android looper 作用,Android:getMainLooper()和Looper.myLooper()之间的区别

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

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

来源: https://codeday.me/bug/20191012/1901578.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值