Android源码のFramework框架层

目录:
1、概识
2、ActivityManager
3、WindowManager
4、几个SystemServer出现过的类

进击的小仙

1. 概识Framework

应用程序框架层

ApplicationFramework 即应用程序框架层,这个框架层里包含了很多Manager,这些Manager里对应着很多<a>系统服务</a>,如ActivityManager对应ActivityManagerServicePackageManager对应PackageManagerServiceWindowManager对应着WindowManagerService等等。这些系统服务都是在SystemServer进程的run()方法中启动的。
从Linux内核到应用程序,进程的启动流程是:

Linux的init进程 → Zygote进程 → SystemServer进程 → App的进程

1.1. 系统服务

系统服务 可以分为三种类型:

  • BootStrapServices 引导服务类型
  • CoreServices 核心服务类型
  • OtherServices 其他服务类型

启动 系统服务:
系统服务由SystemServer.java类启动,在该类的main主函数中会调用run()方法,run()方法首先实例化SystemServiceManager对象,再利用LocalService.addService()方法将这个管理器对象添加到LocalService中。

 // Create the system service manager.
mSystemServiceManager = new SystemServiceManager(mSystemContext);
LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);

然后依次调用以下三个函数来启动各系统服务:

startBootstrapServices(); // 引导类服务
startCoreServices(); // 核心类服务
startOtherServices(); // 其他类服务

具体是通过mSystemServiceManagerstartService()方法来启动各服务,如AMS服务的启动:

mActivityManagerService = mSystemServiceManager.startService(
                ActivityManagerService.Lifecycle.class).getService();

系统服务的启动顺序
InstallerActivityManagerService
PowerManagerService
ActivityManagerService
DisplayManagerService
PackageManagerService
UserManagerService
SensorService
BatteryService
UsageStatsService
WebViewUpdateService
OtherServices

1.2. BootStrapServices 引导服务

  • ActivityManagerService【管理整个框架中任务、进程管理, Intent解析等的核心实现,管理四大组建的生命周期】
  • PowerManagerService【电源管理服务】
  • LightsService【光感服务】
  • DisplayManagerService【展示管理服务】
  • PackageManagerService【包管理服务】
  • UserManagerService【用户管理服务】
  • SensorService【传感器服务】

1.3. CoreServices 核心服务

  • BatteryService【电池管理服务】
  • UsageStatsService【用户使用状态服务】
  • WebViewUpdateService【WebView更新服务】

1.4. OtherServices其他服务

  • SchedulingPolicyService【调度策略服务】
  • TelecomLoaderService【电信加载服务】
  • TelephonyRegistry【提供电话注册、管理服务,可以获取电话的链接状态、信号强度等等服务】
  • CameraService【相机服务】
  • AccountManagerService【账户管理服务,需先于ContentService启动】
  • ContentService【内容服务,主要是数据库等提供解决方法的服务】
  • VibratorService【震动服务】
  • ConsumerIrService【远程控制服务,通过红外等控制周围的设备(例如电视等)】
  • AlarmManagerService【闹钟、定时器服务】
  • InputManagerService【处理分发事件,从WindowManagerService独立出来的】
  • WindowManagerService【窗口管理服务】
  • BluetoothService【蓝牙服务】
  • InputMethodManagerService【输入法服务】
  • AccessibilityManagerService【辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果,View的点击、焦点等事件分发管理服务】
  • MountService【磁盘加载服务程序,NotificationManagerService依赖这个服务】
  • UiModeManagerService【夜间模式和行车模式管理服务】
  • LockSettingsService【锁屏设置服务】
  • PersistentDataBlockService【永久数据存储分区服务】
  • DeviceIdleController【设备idle状态控制器】
  • DevicePolicyManagerService【设备策略管理服务】
  • StatusBarManagerService【状态栏管理服务】
  • ClipboardService【剪贴板服务】
  • NetworkManagementService【网络管理服务】
  • TextServicesManagerService【文本服务】
  • NetworkScoreService【android.net.NetworkScoreManager的备份服务】
  • NetworkStatsService【网络状态服务】
  • NetworkPolicyManagerService【网络策略管理服务】
  • WIFI_P2P_SERVICE【】
  • WIFI_SERVICE【】
  • WifiScanningService【】
  • RttService【】
  • ETHERNET_SERVICE【】
  • ConnectivityService【连接服务】
  • NsdService【网络服务搜索】
  • UPDATE_LOCK_SERVICE【】
  • NotificationManagerService【广播管理服务】
  • DeviceStorageMonitorService【设备存储模拟器服务】
  • LocationManagerService【GPS、定位等位置服务】
  • CountryDetectorService【检测所在国家服务】
  • SearchManagerService【搜素管理服务 】
  • DropBoxManagerService【系统运行时日志的存储与管理服务】
  • WallpaperManagerService【壁纸管理服务】
  • AudioService【音频服务】
  • DockObserver【管理座子的插入与拔出】
  • MidiManagerService【乐器数字接口管理服务】
  • UsbService【USB服务】
  • SerialService【串口设备服务】
  • TwilightService【夜间模式服务】
  • JobSchedulerService【工作调度服务】
    <a>....有点多,以后再贴~~~</a>

2. ActivityManager

ActivityManager管理和维护系统中所有正在运行着的Activity的相关信息,并提供了相关的访问接口。ActivityManager类的类注释(与系统中所有运行着的Activity进行交互):

Interact with the overall activities running in the system.

Paste_Image.png

ActivityManager作为客户端,他的所有操作最终都由AMS(ActivityManagerService)来完成。

Paste_Image.png

2.1. AMS

AMS(ActivityManagerService)是管理系统组件的核心服务,负责四大组件的启动、切换、调度,进程的管理和调度等等。他的初始化由SystemServer在执行run()方法的时候完成,之后便独立运行在进程中。
所在目录:
/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
主要功能:

  • 統一调度各个Activity的运行:ActivityRecord
  • 进程管理:ProcessRecord
  • 内存管理:TaskRecord

2.2. 代理模式

代理模式是设计模式中的一种,为了解耦,ActivityManager和AMS二者通过代理模式实现交互。ActivityManagerProxyActivityManager的代理,也称为本地代理;ActivityManagerNativeActivityManagerService的代理,也称为远端代理。

2.3. Binder粘合剂

Binder作为粘合剂,主要是连接本地代理和远端代理。由远端代理ActivityManagerNative继承,在其中粘合本地代理。


3. WindowManager

外部访问Window的入口,可实现添加、删除、更新View。他的所有操作最后交由WMS(WindowManagerService)完成。与ActivityManager类不同,WindowManager是一个接口,接口注释为(应用与窗口管理器交互的接口):

The interface that apps use to talk to the window manager.

这个接口中的内容比较少,看看他的结构:

Paste_Image.png

WMS为所有窗口分配Surface,掌管Surface的显示顺序(Z-order)以及位置尺寸,控制窗口动画,并且还是输入系统的一重要的中转站。WMS的初始化也是由SystemServer在执行run()方法的时候完成的,初始化后运行在SystemServer进程中。初始化分以下三步:

  • 创建WMS实例:
wm = WindowManagerService.main(context, inputManager,
                    mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL,
                    !mFirstBoot, mOnlyCore);
  • 添加到ServiceManager中:ServiceManager.addService(Context.WINDOW_SERVICE,wm);
  • 初始化显示信息:wm.displayReady();
  • 处理SystemReady通知:wm.systemReady();

4. 几个SystemServer出现过的类

4.1. SystemConfig

SystemConfig负责解析系统Permissions和Feature信息。
类注释中说是加载系统全局配置信息:

Loads global system configuration info.

Paste_Image.png

4.2. EntropyMixer

生成随机数的服务,前生是EntropyService

4.3. Watchdog

Watchdog用于监测Service是否处于正常的工作中。他是一个线程,运行在SystemServer进程中。

This class calls its monitor every minute. Killing this process if they don't return

5. 参考资料

深入理解 PackageManagerService
Android 系统服务一览表
SystemServer进程源码分析之一
Android Framework之PMS篇【PackageManagerService】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容