本章主要是介绍其中的应用框架层(Application Framework),前面的章节已经提到android是基于多进程设计的,先看看如下手稿图(mac下没找到顺手的UML画图工具),其类名基于4.2.2版本:
从上图中可以看出,核心包括了3+X个进程:
-
servicemanager守护进程:系统启动时自动启动,通过init.rc设置,主要用来加载binder驱动,实现SystemServer与APP进程之间的消息传递,进而实现IPC中转调用;
-
surfaceflinger守护进程:系统启动时自动启动,通过init.rc设置,他也是一个驱动,每个窗口都对应一个Surface,该驱动的作用就是把各个Surface显示在同一个屏幕上;
-
SystemServer进程:该进程是zygote孵化出的第一个进程(详见第9章的描述),可以理解为应用框架的服务端,用来提供各种系统服务,核心的包括窗口管理服务WindowManagerService、活动管理服务ActivityManagerService等;
-
IActivityManager:管理所有应用程序中的Activity,其实现类是ActivityManagerService;当前台应用APP需要启动某个Activity时,需要先通过binder机制请求IActivityManager,OK之后再回调APP进程中的ActivityThread.ApplicationThread进行真正的Activity加载;
-
IWindowManager:定义应用窗口各种操作的接口,其实现类是WindowManagerService,基于Binder框架实现各窗口的叠放次序、隐藏或显示;当系统接收到按键或触控事件之后驱动会中转到WindowManagerService,之后他回调APP进程中的PhoneWindow.W实现对各类消息的分发;
-
IWindowSession:定义应用窗口和应用之间的会话,其实现类是Session;该会话是由IWindowManager负责open并维护的,他负责与APP直接打交道,通过binder机制实现IPC调用,APP通过它实现对IWindowManager的间接调用;
-
请大家思考一个问题:为什么APP不直接与IWindowManager打交道呢,还要通过IWindowSession来进行一次中转,这样不是反而让系统架构变得更复杂了吗?
其实我也有这个疑问,目前我的理解是IWindowSession中加入了对输入法InputMethod的处理,他实现应用部分窗口和输入法窗口的整合;而IWindowManager是不关心是否有输入法的,在他眼中只有窗口,而窗口里面具有展示的是什么他是不关心的;
-
APP所在进程:每个APP应用启动后都会是一个独立进程,这就是X的原因,有多少个应用,X就是多少;
-
Context:Activity/Service组件的基类,可以理解为上下文或者场景,其实现类为ContextImpl;当我们调用startActivity()时就会通过binder机制远程调用到IActivityManager;
-
Activity:android系统的4大基础组件之一,是应用程序的最小单元类,可以理解为一个页面的控制类,如同java服务端我们所说的action;
-
IApplicationThread:应用进程提供给系统服务回调的binder接口,执行具体的Activity加载,其实现类为ActivityThread.ApplicationThread;
-
ActivityThread:应用程序执行的主线程类,每个应用有且只有一个ActivityThread实例,入口为static main()函数,他所在的线程即为UI线程或主线程;
-
Window:提供通用的窗口操作API的基类;注意:Wms中管理的窗口指的是View,并不是这个Window,这里的Window只是一个抽象类,android系统不仅仅可以在手机上运行,在其他设备上也可以运行,此时他们的窗口操作的实现可以完全不一样;
-
PhoneWindow:继承至Window,即适用于手机上窗口操作的实现类;
-
PhoneWindow.DecorView:继承于FrameLayout,他是应用窗口展示的顶级View容器(Top Level),即应用中自己加入的各种View控件其实都是DecorView的child;
-
ViewParent:定义了View的父辈所需的各类操作API接口,其实现类是 ViewRootImpl/ViewGroup;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
文末
初级工程师拿到需求会直接开始做,然后做着做着发现有问题了,要么技术实现不了,要么逻辑有问题。
而高级工程师拿到需求会考虑很多,技术的可行性?对现有业务有没有帮助?对现有技术架构的影响?扩展性如何?等等…之后才会再进行设计编码阶段。
而现在随着跨平台开发,混合式开发,前端开发之类的热门,Android开发者需要学习和掌握的技术也在不断的增加。
通过和一些行业里的朋友交流讨论,以及参考现在大厂面试的要求。我们花了差不多一个月时间整理出了这份Android高级工程师需要掌握的所有知识体系。你可以看下掌握了多少。
混合式开发,微信小程序。都是得学会并且熟练的
这些是Android相关技术的内核,还有Java进阶
高级进阶必备的一些技术。像移动开发架构项目实战等
Android前沿技术;包括了组件化,热升级和热修复,以及各种架构跟框架的详细技术体系
以上即是我们整理的Android高级工程师需要掌握的技术体系了。可能很多朋友觉得很多技术自己都会了,只是一些新的技术不清楚而已。应该没什么太大的问题。
而这恰恰是问题所在!为什么别人高级工程师能年限突破30万,而你只有十几万呢?
就因为你只需补充你自己认为需要的,但并不知道企业需要的。这个就特别容易造成差距。因为你的技术体系并不系统,是零碎的,散乱的。那么你凭什么突破30万年薪呢?
我这些话比较直接,可能会戳到一些人的玻璃心,但是我知道肯定会对一些人起到点醒的效果的。而但凡只要有人因为我的这份高级系统大纲以及这些话找到了方向,并且付出行动去提升自我,为了成功变得更加努力。那么我做的这些就都有了意义。
喜欢的话请帮忙转发点赞一下能让更多有需要的人看到吧。谢谢!
以上系统大纲里包含的所有技术资料,我这里都有的。可以免费分享给有需要的朋友!
更加努力。那么我做的这些就都有了意义。
喜欢的话请帮忙转发点赞一下能让更多有需要的人看到吧。谢谢!
以上系统大纲里包含的所有技术资料,我这里都有的。可以免费分享给有需要的朋友!