目录:
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.
ActivityManager作为客户端,他的所有操作最终都由AMS(ActivityManagerService)来完成。
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.
这个接口中的内容比较少,看看他的结构:
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.
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】