赞
踩
消息队列的工作原理
MessageQueue有两个操作:插入和读取。读取本身会伴随着删除操作。插入和读取分别对应enqueueMessage和next。
关于enqueueMessage的源码就是在单链表上添加新的message。
next则是一个无限循环,当有消息在队列里时,则会返回这条消息并将其从列表中移除,否则一直阻塞在这里。
Looper的工作原理
就是Looper一直查看MessageQueue中是否有新消息,没有就一直阻塞,否则取出新消息。
在它的构造方法中它会先创建一个MessageQueue,然后将当前线程的对象保存起来。
当我们在一个线程中用Looper.prepare来创建一个Looper,接着通过loop方法来开启消息循环:
主线程中的prepare方法是prepareMainLooper。Looper也是可以退出的,它提供了quit和quitSafely来退出一个Looper。quit是直接退出,quitSafely是把消息队列所以消息处理完才退出。这里是loop方法的源码:
loop是一个死循环,唯一跳出循环的方式是MessageQueue的next方法是null。当没有消息时,next会一直阻塞,导致loop也一直阻塞。如果next返回了新消息,则用dispatchMessage去处理,而这个方法是在创建它Handler的Looper中执行的,这样就成功的将代码逻辑切换到指定的线程中去了。
Handler的工作原理
Handler的主要作用是发送和接收过程。post最终也是通过send来实现的,sendMessage的源码就是在MessageQueue中添加一条信息,然后MessageQueue就会通过next将这条信息交给Looper,最后由Looper交由Handler处理,即调用了Handler的dispatchMessage。
dispatchMessage先检查msg的callback是否为null,不为null就通过handleCallback来处理信息。Message的callback是一个Runnable对象,实际上就是Handler的post方法所传递的Runnable参数。handleCallback的逻辑就是运行这个Runnable。接着检查mCallback是否为null,不为null就调用mCallback的HandleMessage方法来处理消息。最后通过Handler的HandleMessage来处理消息。整个过程如下流程图:
主线程的消息循环:
ActivityThread通过ApplicationThread和AMS来进行IPC,AMS以进程间通信的方式完成ActivityThread的请求后会回调ApplicationThread的Binder方法,然后ApplicationThread会向H发出信息,H收到消息后会将ApplicationThread的逻辑切换到ActivityThread中去执行,即切换到主线程中执行。这个过程就是主线程的消息循环模型。
Android的线程和线程池
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
一些基础知识和理论肯定是要背的,要理解的背,用自己的语言总结一下背下来。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,我能明显感觉到国庆后多了很多高级职位,所以努力让自己成为高级工程师才是最重要的。
好了,希望对大家有所帮助。
接下来是整理的一些Android学习资料,有兴趣的朋友们可以关注下我免费领取方式。
①Android开发核心知识点笔记
②对标“阿里 P7” 40W+年薪企业资深架构师成长学习路线图
③面试精品集锦汇总
④全套体系化高级架构视频
**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
获取方式:【Android架构视频+BAT面试专题PDF+学习笔记】
350599)]
获取方式:【Android架构视频+BAT面试专题PDF+学习笔记】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。