目录: 1、概识 2、ActivityManager 3、WindowManager 4、几个SystemServer出现过的类
进击的小仙
1. 概识Framework
应用程序框架层
ApplicationFramework 即应用程序框架层,这个框架层里包含了很多Manager,这些Manager里对应着很多<a>系统服务</a>,如ActivityManager
对应ActivityManagerService
,PackageManager
对应PackageManagerService
,WindowManager
对应着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(); // 其他类服务
具体是通过mSystemServiceManager
的startService()
方法来启动各服务,如AMS
服务的启动:
mActivityManagerService = mSystemServiceManager.startService( ActivityManagerService.Lifecycle.class).getService();
系统服务的启动顺序:Installer
ActivityManagerService
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二者通过代理模式实现交互。ActivityManagerProxy
为ActivityManager
的代理,也称为本地代理;ActivityManagerNative
为ActivityManagerService
的代理,也称为远端代理。
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】
作者:傲娇小野猫
链接:https://www.jianshu.com/p/4ad1f3fc815d