请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

自己实现Handler-Looper框架的问题

按照这个https://github.com/enbandari/PortableAndroidHandler
在Android上自定义Handler-Looper框架,开启Looper.loop()后,子线程发送的Message可以得到正常处理,但再点击界面上的Button无响应,并且弹出“APP无响应”对话框。

这个现象是不是因为主线程中DelayQueue.take()获取消息阻塞的原因,如果是这个原因,Android的java层有没有解决的方法?

正在回答

1回答

你再想想?没有消息当然是阻塞的,android自己的looper本身没有消息也是阻塞的,这不是问题,是设计如此。

1 回复 有任何疑惑可以回复我~
  • 提问者 AndroidHunter #1
    没有消息是要阻塞。但咱自己写的Handler-Looper框架开启Looper.loop()后,再点击界面上的Button无响应,并且弹出“APP无响应”对话框是什么原因呢
    回复 有任何疑惑可以回复我~ 2019-12-05 00:17:18
  • bennyhuo 回复 提问者 AndroidHunter #2
    你肯定是在主线程调用了呗,Looper是个死循环,把主线程给阻塞了当然要没有响应了。建议同学再回过头来看下handler原理一节感受下Looper的作用,anr的产生机制也讲的很详细,看完就应该有答案了。
    回复 有任何疑惑可以回复我~ 2019-12-05 06:13:08
  • 提问者 AndroidHunter #3
    又看了一遍还是没想明白,同样是在主线程调用Looper,为啥系统的handler机制没把主线程阻塞,咱自己写的handler会把主线程阻塞导致点击Button没有响应?
    回复 有任何疑惑可以回复我~ 2019-12-05 11:16:45
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信