《Android内核剖析》笔记 第6章 应用框架Framework概述

本章主要是介绍其中的应用框架层(Application Framework),前面的章节已经提到android是基于多进程设计的,先看看如下手稿图(mac下没找到顺手的UML画图工具),其类名基于4.2.2版本:

从上图中可以看出,核心包括了3+X个进程:

  1. servicemanager守护进程:系统启动时自动启动,通过init.rc设置,主要用来加载binder驱动,实现SystemServer与APP进程之间的消息传递,进而实现IPC中转调用;

  2. surfaceflinger守护进程:系统启动时自动启动,通过init.rc设置,他也是一个驱动,每个窗口都对应一个Surface,该驱动的作用就是把各个Surface显示在同一个屏幕上;

  3. SystemServer进程:该进程是zygote孵化出的第一个进程(详见第9章的描述),可以理解为应用框架的服务端,用来提供各种系统服务,核心的包括窗口管理服务WindowManagerService、活动管理服务ActivityManagerService等;

  4. IActivityManager:管理所有应用程序中的Activity,其实现类是ActivityManagerService;当前台应用APP需要启动某个Activity时,需要先通过binder机制请求IActivityManager,OK之后再回调APP进程中的ActivityThread.ApplicationThread进行真正的Activity加载;

  5. IWindowManager:定义应用窗口各种操作的接口,其实现类是WindowManagerService,基于Binder框架实现各窗口的叠放次序、隐藏或显示;当系统接收到按键或触控事件之后驱动会中转到WindowManagerService,之后他回调APP进程中的PhoneWindow.W实现对各类消息的分发;

  6. IWindowSession:定义应用窗口和应用之间的会话,其实现类是Session;该会话是由IWindowManager负责open并维护的,他负责与APP直接打交道,通过binder机制实现IPC调用,APP通过它实现对IWindowManager的间接调用;

  7. 请大家思考一个问题:为什么APP不直接与IWindowManager打交道呢,还要通过IWindowSession来进行一次中转,这样不是反而让系统架构变得更复杂了吗?

其实我也有这个疑问,目前我的理解是IWindowSession中加入了对输入法InputMethod的处理,他实现应用部分窗口和输入法窗口的整合;而IWindowManager是不关心是否有输入法的,在他眼中只有窗口,而窗口里面具有展示的是什么他是不关心的;

  1. APP所在进程:每个APP应用启动后都会是一个独立进程,这就是X的原因,有多少个应用,X就是多少;

  2. Context:Activity/Service组件的基类,可以理解为上下文或者场景,其实现类为ContextImpl;当我们调用startActivity()时就会通过binder机制远程调用到IActivityManager;

  3. Activity:android系统的4大基础组件之一,是应用程序的最小单元类,可以理解为一个页面的控制类,如同java服务端我们所说的action;

  4. IApplicationThread:应用进程提供给系统服务回调的binder接口,执行具体的Activity加载,其实现类为ActivityThread.ApplicationThread;

  5. ActivityThread:应用程序执行的主线程类,每个应用有且只有一个ActivityThread实例,入口为static main()函数,他所在的线程即为UI线程或主线程;

  6. Window:提供通用的窗口操作API的基类;注意:Wms中管理的窗口指的是View,并不是这个Window,这里的Window只是一个抽象类,android系统不仅仅可以在手机上运行,在其他设备上也可以运行,此时他们的窗口操作的实现可以完全不一样;

  7. PhoneWindow:继承至Window,即适用于手机上窗口操作的实现类;

  8. PhoneWindow.DecorView:继承于FrameLayout,他是应用窗口展示的顶级View容器(Top Level),即应用中自己加入的各种View控件其实都是DecorView的child;

  9. ViewParent:定义了View的父辈所需的各类操作API接口,其实现类是 ViewRootImpl/ViewGroup;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

文末

初级工程师拿到需求会直接开始做,然后做着做着发现有问题了,要么技术实现不了,要么逻辑有问题。

而高级工程师拿到需求会考虑很多,技术的可行性?对现有业务有没有帮助?对现有技术架构的影响?扩展性如何?等等…之后才会再进行设计编码阶段。

而现在随着跨平台开发,混合式开发,前端开发之类的热门,Android开发者需要学习和掌握的技术也在不断的增加。

通过和一些行业里的朋友交流讨论,以及参考现在大厂面试的要求。我们花了差不多一个月时间整理出了这份Android高级工程师需要掌握的所有知识体系。你可以看下掌握了多少。

混合式开发,微信小程序。都是得学会并且熟练的

这些是Android相关技术的内核,还有Java进阶

高级进阶必备的一些技术。像移动开发架构项目实战等

Android前沿技术;包括了组件化,热升级和热修复,以及各种架构跟框架的详细技术体系

以上即是我们整理的Android高级工程师需要掌握的技术体系了。可能很多朋友觉得很多技术自己都会了,只是一些新的技术不清楚而已。应该没什么太大的问题。

而这恰恰是问题所在!为什么别人高级工程师能年限突破30万,而你只有十几万呢?

就因为你只需补充你自己认为需要的,但并不知道企业需要的。这个就特别容易造成差距。因为你的技术体系并不系统,是零碎的,散乱的。那么你凭什么突破30万年薪呢?

我这些话比较直接,可能会戳到一些人的玻璃心,但是我知道肯定会对一些人起到点醒的效果的。而但凡只要有人因为我的这份高级系统大纲以及这些话找到了方向,并且付出行动去提升自我,为了成功变得更加努力。那么我做的这些就都有了意义。

喜欢的话请帮忙转发点赞一下能让更多有需要的人看到吧。谢谢!

以上系统大纲里包含的所有技术资料,我这里都有的。可以免费分享给有需要的朋友!

更加努力。那么我做的这些就都有了意义。

喜欢的话请帮忙转发点赞一下能让更多有需要的人看到吧。谢谢!

以上系统大纲里包含的所有技术资料,我这里都有的。可以免费分享给有需要的朋友!

资料领取方式:点击我的GitHub

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值