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 ...
 
随机推荐
- es6 中的模块导入与nodejs 中模块的导入的异同!
			
我们知道es6 的模块导入导出是通过import 和 export 来实现,而nodejs的模块导入导出是通过require 和module.exports 来实现,那么它们有什么异同吗? 请看如下: ...
 - Python面向对象 |  isinstance和issubclass
			
isinstance(a,b):判断a是否是b类(或者b类的基类)实例化的对象 class A: pass class B(A): pass obj = B() print(isinstance(ob ...
 - Native Clojure with GraalVM
			
转自:https://www.innoq.com/en/blog/native-clojure-and-graalvm/ GraalVM is a fascinating piece of techn ...
 - 【可持久化线段树】【P5826】【模板】子序列自动机
			
[可持久化线段树][P5826][模板]子序列自动机 Description 给定一个序列 \(A\),有 \(q\) 次询问,每次询问一个序列 \(B\) 是不是 \(A\) 的子序列 Limita ...
 - 【BZOJ4722】由乃
			
[BZOJ4722]由乃 题面 bzoj 题解 考虑到区间长度为\(14\)时子集个数\(2^{14}>14\times 1000\),由抽屉原理,区间长度最多为\(13\)(长度大于这个值就一 ...
 - 从零和使用mxnet实现dropout
			
需求: 从零和使用mxnet实现dropout 数据集: 使用load_digits()手写数字数据集 要求: 使用1个掩藏层n_hidden1 = 36,激活函数为relu,损失函数为softmax ...
 - html文本或元素6px间距问题
			
html中的文本内容或者是具有inline或inline-block的元素之间会6px的间距, 这是因为html文当中若出现文字分隔符(文字分隔符主要指空格或者换行等), 那么其就会被渲染成一个空格( ...
 - HTML5 - websocket的应用 之 简易聊天室
			
需要知识点: 前端知识 jq操作dom nodejs socket.io 关于websocket api的知识点,见上篇章<HTML5-Websocket>. 聊天室思路/原理: A和B聊 ...
 - Android Studio 之 ROM【1】, Entity,Dao,Database
			
Android Studio 之 ROM, Entity,DAO,DataBase 1.Entity 实体类 package com.example.roombasic; import android ...
 - [技术博客]阿里云签名机制字符串的C语言实现
			
[技术博客]阿里云签名机制字符串的C语言实现 问题描述见:阿里云签名机制 话不多说,上字符串函数转化函数代码 bool AlicloudRequest::sendV2Request() { if( q ...