一、FrameWork整体运行框架说明:

1.Activity的创建会创建PhoneWindow,PhoneWindow会创建DocerView,DocerView会创建View和ViewGroup。

2.应用程序在Activity中添加和删除窗口,是通过调用WindowManager类的addView和RemoveView函数达成,具体实现是通过桥接模式实现的WindowManagerImpl来实现。进而转向调用ViewRoot类的setView和removeViewLocked,然后通过IPC机制调用到WMS中的addWindow和removeWindow来完成。

3.当AMS通知ActivityThread销毁某个Activity时,ActivityThread会直接调用WindowManager的removeView方法删除窗口,实现在WindowManagerImpl类。

4.AMS调用WMS,一般情况是告诉WMS一些消息,比如某个新的Activity要启动了,从而WMS会保存一个该Activity记录的引用,有时也会直接调用WMS的接口,比如切换窗口时,启动切换窗口是直接调用WMS的setAppStartingWindow。

5.WMS内部是全权接管了输入消息的处理和屏幕的绘制,输入消息的处理是借助于InputManager类完成,InputManger类会生成两个线程InuptReaderThread和InputDispatcherThread,InuptReaderThread循环地从EventHub读取输入消息,对于非大数据是通过channel方式(InputChannel会生成serverChannel和ClientChannel)派发消息,对应大数据则是通过共享缓存ShareMemory分发消息;InputDispatcherThread会从Channel或者ShareMemory获取消息并派发,派发是通过InputPublisher,应用层客户端通过InputConsumer不断从Channel或者ShareMemory获取派发的消息,进而交由ViewRoot处理。其中InputPublisher,InputPublisher和InputConsumer是由InputMoniter生成。

所以InuptReaderThread和EventHub是生产者,InputDispatcherThread是消费者,InputMoniter是消费渠道,ViewRoot是消费者和生产者的桥梁,WMS和AMS是家庭夫妻双管家。

二、FrameWork启动流程

Android启动过程包含从Linux内核加载到Home应用程序启动的整个过程。整体流程如下:

  1. Android是基于Linux内核的系统平台。启动时,首先通过bootloader(系统加载器),加载Linux内核。在Linux加载启动时,与普通的Linux启动过程相同,先初始化内核,然后调用init进程。

  2. Init进程启动zygote:解析配置文件:init.rc(系统配置文件)及initXXX.rc(与硬件平台相关的文件)的内容执行一系列的命令,包括创建mount目录,安装文件系统,设置属性,启动属性服务器,启动Socket服务端口-》加载preload-classes和preload-resources(Framework大部分类及资源)-》fork启动新的进程Zygote(其实是由fork和execv共同创建)。

  3. Zygnote孵化第一个进程SystemServer,SystemServer启动各种系统服务线程。SystemServer进程在Android的运行环境中扮演了"神经中枢"的作用,APK应用中能够直接交互的大部分系统服务都在该进程中运行,常见的比如WindowManagerServer(Wms)、ActivityManagerSystemService(AmS)、PackageManagerServer(PmS)等,这些系统服务都是以一个线程的方式存在于SystemServer进程中。SystemServer的main()函数首先调用的是init1()函数,这是一个native函数,内部会进行一些与Dalvik虚拟机相关的初始化工作。该函数执行完毕后,其内部会调用Java端的init2()函数,该函数首先创建了一个ServerThread对象,该对象是一个线程,然后直接运行该线程,于是,从ServerThread的run()方法内部开始真正启动各种服务线程。

基本上每个服务都有对应的Java类,从编码规范的角度来看,启动这些服务的模式可归类为三种:模式一是指直接使用构造函数构造一个服务,由于大多数服务都对应一个线程,因此,在构造函数内部就会创建一个线程并自动运行。模式二是指服务类会提供一个getInstance()方法,通过该方法获取该服务对象,这样的好处是保证系统中仅包含一个该服务对象。模式三是指从服务类的main()函数中开始执行。无论以上何种模式,当创建了服务对象后,有时可能还需要调用该服务类的init()或者systemReady()函数以完成该对象的启动

  1. 当以上服务线程都启动后,AMS以systemReady调用完成最后启动,mMainStack.resumeTopActivityLocked(null)-》mService.startHomeActivityLocked启动第一个Activity。至此,FrameWorkd启动完成。

SystemServer中启动服务列表

服务类名称

作用描述

启动模式

EntropyService

提供伪随机数

1.0

PowerManagerService

电源管理服务

1.2/3

ActivityManagerService

最核心的服务之一,管理Activity

自定义

TelephonyRegistry

通过该服务注册电话模块的事件响应,比如重启、关闭、启动等

1.0

PackageManagerService

程序包管理服务

3.3

AccountManagerService

账户管理服务,是指联系人账户,而不是Linux系统的账户

1.0

ContentService

ContentProvider服务,提供跨进程数据交换

3.0

BatteryService

电池管理服务

1.0

LightsService

自然光强度感应传感器服务

1.0

VibratorService

震动器服务

1.0

AlarmManagerService

定时器管理服务,提供定时提醒服务

1.0

WindowManagerService

Framework最核心的服务之一,负责窗口管理

3.3

BluetoothService

蓝牙服务

1.0+

DevicePolicyManagerService

提供一些系统级别的设置及属性

1.3

StatusBarManagerService

状态栏管理服务

1.3

ClipboardService

系统剪切板服务

1.0

InputMethodManagerService

输入法管理服务

1.0

NetStatService

网络状态服务

1.0

NetworkManagementService

网络管理服务

NMS.create()

ConnectivityService

网络连接管理服务

2.3

ThrottleService

暂不清楚其作用

1.3

AccessibilityManagerService

辅助管理程序截获所有的用户输入,并根据这

些输入给用户一些额外的反馈,起到辅助的效果

1.0

MountService

挂载服务,可通过该服务调用Linux层面的mount程序

1.0

NotificationManagerService

通知栏管理服务,Android中的通知栏和状

态栏在一起,只是界面上前者在左边,后者在右边

1.3

DeviceStorageMonitorService

磁盘空间状态检测服务

1.0

LocationManagerService

地理位置服务

1.3

SearchManagerService

搜索管理服务

1.0

DropBoxManagerService

通过该服务访问Linux层面的Dropbox程序

1.0

WallpaperManagerService

墙纸管理服务,墙纸不等同于桌面背景,

在View系统内部,墙纸可以作为任何窗口的背景

1.3

AudioService

音频管理服务

1.0

BackupManagerService

系统备份服务

1.0

AppWidgetService

Widget服务

1.3

RecognitionManagerService

身份识别服务

1.3

DiskStatsService

磁盘统计服务

1.0

理解Android Framework相关推荐

  1. 《深入理解Android 卷III》第四章 深入理解WindowManagerService

    <深入理解Android 卷III>即将公布,作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白.即Android Framework中和UI相关的部分. ...

  2. Android 系统(57)---深入理解Android输入系统

    <深入理解Android 卷III>第五章 深入理解Android输入系统 <深入理解Android 卷III>即将发布,作者是张大伟.此书填补了深入理解Android Fra ...

  3. 《深入理解Android 卷III》第八章深入理解Android壁纸

    <深入理解Android 卷III>即将发布,作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分. ...

  4. Android Framework入门介绍

    Android Framework入门介绍 https://blog.csdn.net/fu_kevin0606/article/details/79532710 framework概述 Androi ...

  5. 《深入理解Android 卷III》第六章 深入理解控件(ViewRoot)系统

    <深入理解Android 卷III>即将发布,作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分. ...

  6. 《深入理解Android 卷III》第七章 深入理解SystemUI

    <深入理解Android 卷III>即将发布,作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分. ...

  7. Android Framework 初理解

    概述 其实我们写的App并不是一个完整的程序.我们写的只是一个套件组,就是一堆Activity,Service等等的组件.这个套件组给Framework框架组合在一起才是一个完整的程序.在这里先说一个 ...

  8. 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第二章 深入理解Netd

    原文: http://blog.csdn.net/innost/article/details/20400389 本文使用的源码版本为Android5.1 本章主要内容 介绍Netd; 介绍MDNS和 ...

  9. [深入理解Android卷一全文-第九章]深入理解Vold和Rild

    为什么80%的码农都做不了架构师?>>>    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的 ...

最新文章

  1. mysql查询唯一单词_MySql从表中获取唯一单词列表,其中字段中的值用逗号分隔
  2. 计算机中用户权利和用户权限,揭秘:Win7系统用户和组权限说明
  3. JavaWeb学习总结(十二):Session
  4. y460安装的ubuntu开机时笔记本键盘失效的问题
  5. 2017年,软件开发全过程,描述得不能再详细了
  6. 机器视觉技术在表面缺陷检测方面的发展趋势
  7. 字体Times New Roman
  8. linux下swftools 的配置
  9. python中星号数字乘字符串_Python系列-数字和字符串
  10. 数据库两个表有一个字段互相关联,根据这个关联字段更新一张表
  11. 容器搭建Hadoop步骤
  12. sun服务器清理内存日志_服务器清理日志的命令行
  13. 《软件需求分析》阅读笔记3
  14. DF1协议的官网下载
  15. JetBrains系列产品学生认证申请免费使用教程
  16. 许久未见,归来仍是少年?
  17. Cassandra中Gossip具体实现方式
  18. 无线射频专题《无线局域网排错,第二层重传问题7@远近问题》
  19. catia二维图坐标如何表示_CATIA二维工程制图中孔系尺寸及点坐标标注方法
  20. InnoDB——锁、事务和复制

热门文章

  1. [ACM] hdu 2082 找单词 (母函数)
  2. Effective C++条款7:为多态基类声明virtual析构函数
  3. Java中用split函数进行分割字符串。
  4. 【LeetCode】开始LeetCode的第一题offer03
  5. mfc三视图和斜等测图实现_编程实现TCP协议数据传输
  6. Javascript条件运算符、其他运算符第五课(小二节)
  7. php更改二维数组的键,学习猿地-php如何修改二维数组的键名
  8. 计算机信息的应用安全中心在哪,腾讯游戏安全中心
  9. 椭圆极点极线性质_圆锥曲线(18)———圆锥曲线题目背后的性质总结(1)
  10. you need python_Life is short,you need python!(1)