Android系统庞大且错综复杂,今天小编将带领大家初探Android系统整体架构,一窥其全貌。
本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制。虽然Android系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰。Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过JNI技术打通用户空间的Java层和Native层(C++/C),从而连通整个系统。
为了能让大家整体上大致了解Android系统涉及的知识层面,先来看一张Google官方提供的经典分层架构图,从下往上依次分为Linux内核、HAL、系统Native库和Android运行时环境、Java框架层以及应用层这5层架构,其中每一层都包含大量的子模块或子系统。
上图采用静态分层方式的架构划分,众所周知,程序代码是死的,系统运转是活的,各模块代码运行在不同的进程(线程)中,相互之间进行着各种错终复杂的信息传递与交互流,从这个角度来说此图并没能体现Android整个系统的内部架构、运行机理,以及各个模块之间是如何衔接与配合工作的。为了更深入地掌握Android整个架构思想以及各个模块在Android系统所处的地位与价值,计划以Android系统启动过程为主线,以进程的视角来诠释Android M系统全貌,全方位的深度剖析各个模块功能,争取各个击破。这样才能犹如庖丁解牛,解决、分析问题则能游刃有余。
进程是具有独立功能的程序在一个数据集合上运行的过程。进程是系统进行资源分配的单位,实现的操作系统的并发。
线程是比进程更小的能独立运行的单位,是 调度的基本单位,实现了进程内部的并发。线程成为了程序执行流的最小单位。
当有多个进程请求资源时,就会造成内存资源紧张,所以操作系统还存在一种挂起操作:将进程交换到外存去,使进程进入挂起状态。
进程可以提高系统的并发性和资源的利用率,但还是存在一些缺点的:
为了解决这些缺点,所以引入了线程作为进程内并发执行的更小单元,从而减少程序在并发执行过程中所付出的时空开销。
各个进程拥有自己独立的内存空间,为了保证安全,一个进程不可以直接访问另一个进程的内存空间。但进程之间的通信是必不可少的,所以有以下方式完成进程之间的通信:
直接通信方式,将消息直接发送给对方进程。
间接通信方式,双方都通过共享中间实体来完成对消息的法松和接收。
信号量
**资料开源 【VX:vip204888】**快的一种方式。
线程在切换过程中,需要保存当前线程 、线程状态、堆栈、寄存器状态等信息。寄存器状态主要包括:
进程。因为同一进程内的线程会相互影响,所以如果一个用户的线程死掉了,其他用户的游戏也会崩溃。所以应该为每个用户开辟一个进程,使用户之间不会相互影响。
多线程模型适用于 密集型场合。因为经常会因为 阻塞来切换线程,而线程切换的系统开销比进程切换小。
多进程模型适用于需要频繁计算的场合。
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的百度、腾讯、网易、字节跳动、阿里等公司2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!