广播的接收和发送过程
跟注册过程一样,ContextWrapper也是一个桥接模式,它将发送过程丢给了ContextImpl,,然后ContextImpl又向AMS发送了一个异步请求用于发送广播,AMS用broadcastIntent处理,里面调用了broadcastIntentLocked,这个方法里,首先广播不会对已停止的应用发送广播;其次会根据intent-filter查找出匹配的广播接收者并经过一系列的条件过滤,最终会将满足的广播接收在添加到BroadcastQueue中,接着BroadcastQueue就会将广播发送给相应的接收者。最后在InnerReceiver的onReceive中接收广播。
ContentProvider的工作过程
ContentProvider的onCreate要先于Application的onCreate,这里是启动过程:
启动完以后,外界就可以调用它的CRUD接口。这四个方法都是调用Binder来完成,外界无法直接访问ContentProvider。它只能通过AMS根据Uri来获取相应的ContentProvider的Binder接口IContentProvider,然后访问它。
Android的消息机制
消息机制主要是Handler,Handler的运行需要底层的MessageQueue和Looper支撑。
MessageQueue是消息队列,内部存储了消息的信息。但它的内部并不是真正的队列,而是单链表的数据结构存储消息信息。
Looper是处理queue的循环。Looper以无限循环的形式去访问MessageQueue,如果有消息就处理,如果没有就等待。Looper中还有一个概念就是ThreadLocal,它并不是线程,它的作用是在每个线程中存储数据。Handler创建的时候会采用当前线程的Looper来构造消息循环系统,而Handler的内部如何来获取当前线程的Looper呢?那就是通过ThreadLoacl了。ThreadLocal可以在不同的线程中互不干扰的提供数据,通过ThreadLocal可以轻松获取每一个线程的Looper。所以要使用Hanlder就必须要先为线程创建Looper。我们常用的主线程ActivityThread,它在创建时会初始化Looper,所以在主线程中默认可用Handler。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。
所以,长征路还长,大家还是好好地做个务实的程序员吧。
最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
(https://bbs.csdn.net/forums/f76c2498e3b04ae99081eaf6e6cf692c)**