来谈Android Framework时我们先来看一张Android架构图,

 

Android 架构篇----------Framework初识_第1张图片

Android的架构大概有四层,(1)Application (2) Application FrameWork (3)  Library  Android Runtime (4)Linux Kernel

今天主要聊聊 FrameWork层 对于android开发来说我们有必要认识一下所谓的 EIT模型 E  engine (发动机) I interface (接口) T tire (轮胎) 我们一般的app开发,主要是做的一些 activity   等一些基本组件的组合,并不完整,有了framework的加成才显得有了灵魂,整个app才算完整,对于客户端程序员来说,FrameWork对于我们来说是透明的,我们只要在提供给我们的接口里写好要实现的逻辑代码功能代码就好,俗称造轮子,发动机通过接口连接上我们写的轮子,整个程序就可以跑起来了。

Android FrameWork包含的内容

应用程序框架层,这一层为上层应用提供各种api,提供各种组件和服务来支持我们的Android开发

通常情况下包含三个方面的内容,服务端 客户端 Linux驱动

服务端

(1)ActivityManagerService(Ams)负责调度整个app中的Activity,管理所有Activity的生命周期。是android上层系统最核心的模块之一,主要对android的四大组件进行管理也包括一些诸如 电源,窗口,权限的内容

进程管理包括,进程的创建和销毁,进程的优先级调度

组件的管理,android的四大组件 Activity Broadcast Content Provider  Service

(2)WindowManagerService(Wms)管理程序的窗口的,动画,等 简单来说跟View有关的都离不开它。

(3)KeyQ类是Wms的一个内部类一但创建就会启动一个新线程,这个线程会不断的接受有关UI的一些消息,将其放到QueueEvent的消息队列中。

(4)InputDispatcherThread类该类也是一但创建线程就会不断的从上main的QueueEvent中取出消息,并进行过滤,然后发送给当前活动的客户端程序。

(5)Manager机制  Manager本身是一个服务,服务端有好多服务,当客户端想要去调用这些服务的时候,每次随意去调动的话显得很是混乱,所以建立了这个“中间人”,客户端对服务的请求都需要先通过Manager,由他来调用,类似于java的封装。

客户端

(1)ActivityThread类 主线程类 即UI线程类,根据Ams的要求对Activity BroadCast进行调度

(2)ViewRoot类   负责客户端和 Wms的交互,内部类有W类,W类继承与Binder  Wms想和客户端通信的时候会用到此类,内部还有 ViewRootHandler 继承与Handler,所以当W类收到消息以后可以发送给UI线程,界面的绘制发起点也在此。

(3)W类 ViewRoot的内部类,主要帮助ViewRoot和Wms实现IPC

(4)Activity类,apk运行的最小单位

(5)PhoneWindow类 ,继承自Window类里面放置了一个DecorView类,提供了统一窗口操作API

(6)DecorView ,可以看到的View的所有,继承自FrameLayout,我们写的布局View就是放在这个里面。

(7)WindowsManager 客户端和Wms 交流的中介,客户端想要创建窗口,得先提前告知WindowsManager,客户端不能直接和Wms通信。

Linux驱动

SurfaceFlingger和Binder   SF负责将各个画面显示到屏幕上,Binder负责进程间通信。

FrameWork的开发

framework的开发区别于应用的开发,是android源码的开发,来了解一下

android源码的结构图

├── bionic    android上实现的libc库
├── bootable  存放可启动项,如recovery、bootloader等
├── build     android编译系统所用到的make文件及其它工具
├── cts       android兼容性测试
├── dalvik    dalvik虚拟机
├── development  与开发相关的一些东西
├── device    存放需要适配的设备信息
├── external  第三方库
├── frameworks  framework部分
├── hardware  硬件相关代码
├── kernel    kernel相关代码
├── libcore   android上实现的Java基础库
├── Makefile
├── ndk
├── out       编译输出目录
├── packages  包含系统应用、壁纸应用、内容提供者、输入法等
├── prebuilt  预编译好的工具
├── sdk       sdk相关内容
├── system    操作系统层次的一些可执行程序和配置文件
├── u-boot    用于引导linux启动的u-boot
└── vendor    存放与厂商相关的信息,也可粗放需要适配的设备信息

这些源码一般是放在服务器上的,所以连接服务器时需要下载一些工具如secure crt  xshell 等这里有涉及到一些 make file的知识,有机会补充一下。
对源码进行编译,可以整个编译也可以部分编译  编译好以后可以用fastboot命令命令烧机也可以用adb install 命令安装。

 

 

 

 

更多相关文章

  1. Spring for android实现客户端与服务器的通信
  2. Android新线程中更新主线程UI中的View方法汇总
  3. android开发新浪微博客户端
  4. Android 子线程修改UI方法对比
  5. 基于Paho Android Service 实现MQTT协议通信Android客户端

随机推荐

  1. Invoke-customs are only supported star
  2. 深入浅析Android消息机制
  3. 9. android Gallery(画廊)以及BaseAdapte
  4. android app内存使用限制
  5. 为什么Android的AsyncTask不适合执行长时
  6. Android实现拨打电话功能
  7. Android(安卓)Service Messenger & AIDL
  8. 下载CyanogenMod 7.2 for Motorola Defy
  9. 27、android log日志
  10. android内存溢出处理方式之一