如题,我们在非UI中处理消息时,需要调用loop()方法,通过里面的for循环取出消息进行分派处理。
而在UI线程中我们只需指定Handler即可发送和处理消息。那请问UI线程中是如何取得消息的呢,如果也是用for循环,那发生阻塞了就会影响到UI响应时间,还是通过别的机制?求大牛们解答。
而在UI线程中我们只需指定Handler即可发送和处理消息。那请问UI线程中是如何取得消息的呢,如果也是用for循环,那发生阻塞了就会影响到UI响应时间,还是通过别的机制?求大牛们解答。
解决方案 »
- 桌面widget如何调用一个第三方的activity,并返回结果
- 由于selector xml文件名导致图片不显示的问题
- 最近的一个面试题
- 关于APK的问题
- GPS定位的问题,求助
- android系统中,连续点击按钮,界面会弹出ANR或者逻辑顺序乱掉
- 自定义ViewGroup侧滑菜单,当打开菜单时,右侧内容View空白处会闪烁左侧菜单底层的View,是怎么回事?有大神遇过这个问题吗?
- listView数据重复显示
- Camera 应用的两个问题
- 好心人帮帮忙,为什么我下载好的apk文件,装不进模拟器中啊,显示如下
- 按照书本上一步一步操作的,怎么一直报错啊,请高手指导
- BluetoothLeScanner中 onScanResult()的内容如何获取
线程间通信有一个消息队列messageQueue,一旦消息队列有消息由looper分发给handle进行处理。
线程。但是一个进程只有一个looper。记住线程间通信属于ITC,你可以回去看看你的操作系统理论知识,当然我是结合具体的类给你讲的,理论知识可以不会这么明确,但其实道理都一样。
你应该知道一个进程有多个线程,每个进程都有一个消息队列,一般程序类名是MessageQueue,一个进程有一个looper负责分发消息给相应的线程,你在UI线程发送消息是发送到MessageQueue消息队列,并不是直接发送给相应的线程,当你发送的消息进入消息队列MessageQueue后,就是由你说的loop()循环查看消息队列MessageQueue有不有消息,如果没有消息就一直循环,当MessageQueue有消息的时候由looper类分发给相应的线程,由这个线程的handle进行处理,这就是线程间通信ITC的全过程。
handler可以有多个,一个线程一个looper.你将looper上升到进程级别的说法,我还是第一次听说。
每一个线程都可以有一个looper,可以有。
每一个线程都可以有一个looper,可以有。嗯,这一点我刚查了下文档,我理解错了,不好意思,楼主还是听他的说的,我说的这一点是错了。不好意思,差点误人子弟惭愧。
《Android消息处理机制基础篇》: http://blog.csdn.net/lc_miao/article/details/77504343
《Android消息处理机制原理分析篇》: http://blog.csdn.net/lc_miao/article/details/77508009