采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
按照这个https://github.com/enbandari/PortableAndroidHandler 在Android上自定义Handler-Looper框架,开启Looper.loop()后,子线程发送的Message可以得到正常处理,但再点击界面上的Button无响应,并且弹出“APP无响应”对话框。
这个现象是不是因为主线程中DelayQueue.take()获取消息阻塞的原因,如果是这个原因,Android的java层有没有解决的方法?
你再想想?没有消息当然是阻塞的,android自己的looper本身没有消息也是阻塞的,这不是问题,是设计如此。
没有消息是要阻塞。但咱自己写的Handler-Looper框架开启Looper.loop()后,再点击界面上的Button无响应,并且弹出“APP无响应”对话框是什么原因呢
你肯定是在主线程调用了呗,Looper是个死循环,把主线程给阻塞了当然要没有响应了。建议同学再回过头来看下handler原理一节感受下Looper的作用,anr的产生机制也讲的很详细,看完就应该有答案了。
又看了一遍还是没想明白,同样是在主线程调用Looper,为啥系统的handler机制没把主线程阻塞,咱自己写的handler会把主线程阻塞导致点击Button没有响应?
登录后可查看更多问答,登录/注册
改变视野和思维 深度与广度兼备的 Android 进阶面试指导课程
1.1k 1
1.2k 16
892 10
1.2k 10