handler机制原理之精简版

handler机制精简版,通俗易懂!


在应用启动的时候,会启动ActivityThread,在其main方法中

Looper.prepareMainLooper()


prepare方法是在prepareMainLooper中调用的,prepare里面主要是进行setLooper


在往ThredLocal里setLooper
时发现,Looper是直接new出来的,并且在Looper的私有构造方法中new出了消息队列

此时
handler.sendMeassage 调用sendmessageDealay,最终会调用sendMessageAtTime
queue.enquenueMessage是会将消息放入消息队列去
p=mMessages
when<p.when 
p指当前队列的第一条消息,要放入的消息的时间比当前队列的第一条消息的时间短,则插入到最前端


msg.next=p    
mMessages=msg;(mMessage是第一条消息 


Looper.loop方法中获取消息然后再分发消息
msg.target.dispatchMessage(msg)
message对象的target属性,就是handler对象 记录该消息是由谁创建,在obtain方法中赋值


在分发消息方法体里,如果消息处要理,则会调用handlermessage,再唤醒主线程




创建Handler对象时,在构造方法里调用带有布尔值的构造方法,其里面有一个Looper.myLooper和mLooper.mQueue


拿到Looper和消息队列


查看myLooper方法体,发现looper对象是通过ThreadLocal得到的




Looper.loop方法中有一个while死循环
在里面的一个死循环中,queue.next从消息队列中获取一条消息
当消息队列中没有消息时,则会阻塞主线程,但不会报错误
因为在linux的一个进程间通信机制:管道(Pipe) 
原理:在内存中有一个特殊的文件,这个文件有两个句柄(引用),一个是读取句柄,一个是写入句柄,
读取句柄从管道文件中读取的.
主线程looper从消息队列读取消息,当读完所有消息时,进入睡眠,主线程阻塞,
子线程中往消息队列中发送消息,不会唤醒主线程,它会往管道文件中写数据,随即
唤醒主线程,主线程会继续从管道中读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,会再次睡眠. 
内容概要:论文提出了一种基于空间调制的能量高效分子通信方案(SM-MC),将传输符号分为空间符号和浓度符号。空间符号通过激活单个发射纳米机器人的索引来传输信息,浓度符号则采用传统的浓度移位键控(CSK)调制。相比现有的MIMO分子通信方案,SM-MC避免了链路间干扰,降低了检测复杂度并提高了性能。论文分析了SM-MC及其特例SSK-MC的符号错误率(SER),并通过仿真验证了其性能优于传统的MIMO-MC和SISO-MC方案。此外,论文还探讨了分子通信领域的挑战、优势及相关研究工作,强调了空间维度作为新的信息自由度的重要性,并提出了未来的研究方向和技术挑战。 适合人群:具备一定通信理论基础,特别是对纳米通信和分子通信感兴趣的科研人员、研究生和工程师。 使用场景及目标:①理解分子通信中空间调制的工作原理及其优势;②掌握SM-MC系统的具体实现细节,包括发射、接收、检测算法及性能分析;③对比不同分子通信方案(如MIMO-MC、SISO-MC、SSK-MC)的性能差异;④探索分子通信在纳米网络中的应用前景。 其他说明:论文不仅提供了详细的理论分析和仿真验证,还给出了具体的代码实现,帮助读者更好地理解和复现实验结果。此外,论文还讨论了分子通信领域的标准化进展,以及未来可能的研究方向,如混合调制方案、自适应调制技术和纳米机器协作协议等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值