Android源码分析(五)-----如何从架构师的角度去设计Framework框架
一 : 架构与程序
软件架构是一种思维方式,而程序只是实现思维方式的一种手段,代码固然重要,但是若没有整体的思维架构,一切程序都如水中浮萍。
二 : 框架如何设计
暂时抛开Android Framework框架不谈,我们回想一下JavaWeb的核心思想mvc架构。what?这又是什么东西?好吧,不知道mvc架构的百度一下,只能帮你这些了.......

mvc主要是模型、视图、控制器。模型层以Entity,视图层jsp,控制层Action为主的三层架构模型,实现业务分离,以及代码解耦。外层通过Apache Tomcat服务器构建项目。
现在是否有些许的灵感?我们思考一下Framework框架是否也可以按照这种架构去设计呢,请忘掉你大脑中的Android系统,思考该如何去设计一个Framework框架。这是重点,必须要自己思考,自己设计!系统框架设计思想可以参考我之前的文章,此处就不添加链接了,感兴趣的可以自行查阅。切记不可跳过自己思考,自己设计环节而贸然去阅读Android源码,一旦这样做便是痛苦的开始,最终懵逼的离去。
给大家一个参考图,仅供参考,切勿模仿。一定要绘制出自己的架构图。

基于mvc架构衍生出来的模型图中大概包括了共享数据ContentProvicer、资源文件Resource、界面显示View、业务处理ActivityManager、视图管理WindowsManager、项目构建PackageManager。
现在我们可以去观摩一下Android官方架构图

这里比我们设计的Framework多个几项功能,通话管理TelephonyManager,通知管理NotificationManager,位置管理LocationManager,XMPPService。
通话管理TelephonyManager,通知管理NotificationManager,位置管理LocationManager主要是为了完善Framework框架,XMPPService暂时不用考虑,国内无法使用,关于即时通信服务器可参考Mqtt服务器搭建。
三 : 总结
我们Framework框架的设计主要包含了如下六项内容:
- ContentProvider、
- ResourceManager、
- ViewSystem、
- ActivityManager、
- WindowsManager、
- PackageManager、
这些也就是Framework的核心架构,不可缺少任何一项,无论系统如何升级,何种版本,只能围绕核心架构去做扩展。只要掌握了精髓,一切代码皆是浮云。
喜欢源码分析系列可参考其他文章:
Android源码分析(一)-----如何快速掌握Android编译文件
Android源码分析(二)-----如何编译修改后的framework资源文件
Android源码分析(三)-----系统框架设计思想
Android源码分析(四)-----Android源码编译及刷机步骤
Android源码分析(五)-----如何从架构师的角度去设计Framework框架的更多相关文章
- Android源码分析(十五)----GPS冷启动实现原理分析
一:原理分析 主要sendExtraCommand方法中传递两个参数, 根据如下源码可以知道第一个参数传递delete_aiding_data,第二个参数传递null即可. @Override pub ...
- Android源码分析(六)-----蓝牙Bluetooth源码目录分析
一 :Bluetooth 的设置应用 packages\apps\Settings\src\com\android\settings\bluetooth* 蓝牙设置应用及设置参数,蓝牙状态,蓝牙设备等 ...
- Android源码分析(十七)----init.rc文件添加脚本代码
一:init.rc文件修改 开机后运行一次: chmod 777 /system/bin/bt_config.sh service bt_config /system/bin/bt_config.sh ...
- Android源码分析(十六)----adb shell 命令进行OTA升级
一: 进入shell命令界面 adb shell 二:创建目录/cache/recovery mkdir /cache/recovery 如果系统中已有此目录,则会提示已存在. 三: 修改文件夹权限 ...
- Android源码分析(十四)----如何使用SharedPreferencce保存数据
一:SharedPreference如何使用 此文章只是提供一种数据保存的方式, 具体使用场景请根据需求情况自行调整. EditText添加saveData点击事件, 保存数据. diff --git ...
- Android源码分析(十三)----SystemUI下拉状态栏如何添加快捷开关
一:如何添加快捷开关 源码路径:frameworks/base/packages/SystemUI/res/values/config.xml 添加headset快捷开关,参考如下修改. Index: ...
- Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果
一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...
- Android源码分析(十一)-----Android源码中如何引用aar文件
一:aar文件如何引用 系统Settings中引用bidehelper-1.1.12.aar 文件为例 源码地址:packages/apps/Settings/Android.mk LOCAL_PAT ...
- Android源码分析(九)-----如何修改Android系统默认时间
一 : 修改Android系统默认时间 源码路径:frameworks/base/services/java/com/android/server/SystemServer.java 主要变量EARL ...
随机推荐
- 把antd的组件源码搬到Ant Design Pro中使用
把组件源码搬过来后,样式死活不生效,经过1天的努力,有说less-loader的,有说webpack配置,还有说babel配置的,最后,我自己找到了方法 就是在global.less中使用@impor ...
- Anaconda3(1)Windows10下安装Anaconda3(64位)详细过程
https://blog.csdn.net/ychgyyn/article/details/82119201 前言Anaconda指的是一个开源的Python发行版本,其包含了conda.Python ...
- xshell跳转设置 Xshell代理设置
本机------->A(中转)------>B(目标服务器) 本机---------XXXXX------>B(目标服务器) 本机无法直接连接B服务器 第一步:本机连接中转服务器A, ...
- 在Hadoop-3.1.2上安装HBase-2.2.1
目录 目录 1 1. 前言 3 2. 缩略语 3 3. 安装规划 3 3.1. 用户规划 3 3.2. 目录规划 4 4. 相关端口 4 5. 下载安装包 4 6. 修改配置文件 5 6.1. 修改策 ...
- 洛谷 P2580 【于是他错误的点名开始了】题解
XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900). 题目背景 ...
- Springboot之自定义配置
SpringBoot自定义配置 springboot在这里就不过多介绍了,大家都应该了解springboot零配置文件,所以配置信息都装配在属性文件(properties.yml.yaml)中,有时我 ...
- 二维码解析(编译zxing-cpp)
二维码解析使用的类库是zxing(官网 https://github.com/zxing/zxing). 这个类库是谷歌的,原来有c++版本,后来的更新去掉了,zxing介绍了目前基于zxing的其他 ...
- cad 一个小技巧--复制视口带冻结信息
cad使用 ctrl+c 和 ctrl+v 进行跨文件复制视口的时候,会出现复制视口冻结信息丢失,因为你只选择了视口进行复制, 如果要实现带上冻结信息,那么要把含有相关图层的图元一起 ctrl+c/v ...
- cad.net 依照旧样条曲线数据生成一条新样条曲线的代码段. spline生成
Spline spl = entity as Spline; //拿到旧的spline图元... //样条曲线生成条件 var controlPoints = new Point3dCollectio ...
- 代码同时支持.NET Framework和.NET Core
代码同时支持.NET Framework和.NET Core .NetCore技术研究-一套代码同时支持.NET Framework和.NET Core 在.NET Core的迁移过程中,我们将原 ...