Android主线程任务队列Looper之下更底层响应机制是怎么样的(通信协议是怎么实现的)

kevin_King_K 2017-02-11 10:49:29
我们知道 Android Looper负责管理线程的消息队列和消息循环,界面的每一个动作都是一个任务加入到主线程中,然后主线程去消费任务,打开方式是这样的:
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
因为没有去跟过底层的代码(想学好语言的同学们 还是要有读源码的习惯的,不要问我为什么我没去读),所以我的问题来了

1.他底层是怎么去轮循遍历自己队列里有没有消息的呢(是类似开一个线程while(true)的不断去看自己的list里有没有item吗?) ,轮循的时间间隔是多少呢(响应速度浪个辣么快嘞)?
2.服务器基于HTTP的短连接应该也有这样一个机制去遍历是不是有外部的网络请求吧 那个速度也是嘿快的 怎么实现的啊,是不是也差不对的机制啊?(如果把Android的主线程看成服务器,界面动作是请求的话,主线程的这套机制是一套Socket长连接机制吧? 哇哦~任督六脉快通了的既视感嘛
3.主要回答1 就好
4.

公司做了一款 可联网的无线硬盘(化名:迷你型私人云存储器兼便携式离线下载宝 还可以当充电宝哦) Linux系统的板子蛋疼的SMB协议的 现在再做一套上下层通信的协议 所以这套逻辑想理一理
...全文
358 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevin_King_K 2017-02-17
  • 打赏
  • 举报
回复
引用 5 楼 yangchengtest 的回复:
读源码,没你想的那么难。。。 一个FOR死循环队列。你问轮询多长时间,我个人觉得这个和进程调度有关,我没能力解释清楚。。。 [quote=引用 2 楼 u012738818 的回复:] [quote=引用 1 楼 yangchengtest 的回复:] 看HANDLER的处理流程。
我看过handler的处理流程 通过查看Handler和Looper的source code可以发现,这两个类中都维护了一个消息队列final MessageQueue mQueue; 而这个消息队列其实就是Hanlder和Looper进行通信的纽带,我们可以简单的理解为: 当调用sendMessage函数时,其实是向消息队列添加了一条消息。 当调用dispatchMessage函数时,其实是从消息队列中取出了一条消息进行处理。 而Looper则启动了一个循环,在不停的检测有没有消息到了,如果有消息到来就调用Handler的dispatchMessage函数进行处理。 这样理解,我们就可以不用去管Handler和Looper的内部处理过程有多么的复杂,只需关注这两个消息发送和处理函数即可,在阅读代码的时候,也不用费很大力气去定位或查找消息的处理函数。 他会给你类似这样的结果 但是我问的就是他说的 内部处理过程[/quote][/quote]好的 谢谢 我就是好奇handler的处理效率特别高 我自己想做一个类似的机制 但是觉得自己写一个死循环倒是没什么 但是怎么把效率提高 你要是每1毫秒 或者10毫秒循环一次 觉得很耗cup
magicyang1234 2017-02-17
  • 打赏
  • 举报
回复
读源码,没你想的那么难。。。 一个FOR死循环队列。你问轮询多长时间,我个人觉得这个和进程调度有关,我没能力解释清楚。。。
引用 2 楼 u012738818 的回复:
[quote=引用 1 楼 yangchengtest 的回复:] 看HANDLER的处理流程。
我看过handler的处理流程 通过查看Handler和Looper的source code可以发现,这两个类中都维护了一个消息队列final MessageQueue mQueue; 而这个消息队列其实就是Hanlder和Looper进行通信的纽带,我们可以简单的理解为: 当调用sendMessage函数时,其实是向消息队列添加了一条消息。 当调用dispatchMessage函数时,其实是从消息队列中取出了一条消息进行处理。 而Looper则启动了一个循环,在不停的检测有没有消息到了,如果有消息到来就调用Handler的dispatchMessage函数进行处理。 这样理解,我们就可以不用去管Handler和Looper的内部处理过程有多么的复杂,只需关注这两个消息发送和处理函数即可,在阅读代码的时候,也不用费很大力气去定位或查找消息的处理函数。 他会给你类似这样的结果 但是我问的就是他说的 内部处理过程[/quote]
kevin_King_K 2017-02-17
  • 打赏
  • 举报
回复
引用 3 楼 jav_imba 的回复:
[b][b][b]啦啦啦 [/b][/b][/b]
jav_imba 2017-02-17
  • 打赏
  • 举报
回复
[b][b][b]啦啦啦 [/b][/b][/b]
kevin_King_K 2017-02-17
  • 打赏
  • 举报
回复
引用 1 楼 yangchengtest 的回复:
看HANDLER的处理流程。
我看过handler的处理流程 通过查看Handler和Looper的source code可以发现,这两个类中都维护了一个消息队列final MessageQueue mQueue; 而这个消息队列其实就是Hanlder和Looper进行通信的纽带,我们可以简单的理解为: 当调用sendMessage函数时,其实是向消息队列添加了一条消息。 当调用dispatchMessage函数时,其实是从消息队列中取出了一条消息进行处理。 而Looper则启动了一个循环,在不停的检测有没有消息到了,如果有消息到来就调用Handler的dispatchMessage函数进行处理。 这样理解,我们就可以不用去管Handler和Looper的内部处理过程有多么的复杂,只需关注这两个消息发送和处理函数即可,在阅读代码的时候,也不用费很大力气去定位或查找消息的处理函数。 他会给你类似这样的结果 但是我问的就是他说的 内部处理过程
magicyang1234 2017-02-13
  • 打赏
  • 举报
回复
看HANDLER的处理流程。

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧