init1函数较简单,其实重点内容都在init2函数中。init2函数的实现代码如下:
[-->SystemServer.java::init2]
public static final void init2() {
Thread thr = new ServerThread();
thr.setName("android.server.ServerThread");
thr.start();//启动一个线程,这个线程就像英雄大会一样,聚集了各路英雄
}
上面的代码将创建一个新的线程ServerThread,该线程的run函数的实现代码有600多行,如此之长的原因是,Android平台中众多Service都汇集于此。下面我们先来看Service的集体亮相,如图3-1所示。
图3-1 Service群英会
图3-1中共有7大类43个Service(包括Watchdog)。实际上,还有一些Service并没有在ServerThread的run函数中露面,后面遇到时再做介绍。图3-1中的7大类服务主要包括:
位于第一大类的是Android的核心服务,如ActivityManagerService、WindowManager-Service等。
位于第二大类的是和通信相关的服务,如Wifi相关服务、Telephone相关服务。
位于第三大类的是和系统功能相关的服务,如AudioService、MountService、Usb-Service等。
位于第四大类的是BatteryService、VibratorService等服务。
位于第五大类的是EntropyService、DiskStatsService、Watchdog等相对独立的服务。
位于第六大类的是蓝牙服务。
位于第七大类的是和UI紧密相关的服务,如状态栏服务、通知管理服务等。
注意 以上服务的分类并非官方标准,仅是笔者个人之见。
本章将分析其中的第五类服务。该类中的Service之间关系简单,而且功能相对独立。第五大类服务包括:
EntropyService,熵服务,它和随机数的生成有关。
ClipboardService,剪贴板服务。
DropBoxManagerService,该服务和系统运行时日志的存储与管理有关。
DiskStatsService和DeviceStorageMonitorService,这两个服务用于查看和监测系统存储空间。
SamplingProfilerService,这个服务是Android 4.0新增的,功能非常简单。
Watchdog,即看门狗,是Android的“老员工”了。我们在卷I第4章“深入理解Zygote”中曾分析过它。Android 2.3以后其内存检测功能被去掉,所以与Android 2.2相比,显得更简单了。关于Watch dog的内容,就留给读者自己分析了。
后面,将逐次分析这第五类服务的其他几项服务
在《Zygote进程【3】——SystemServer的诞生》一文中介绍了SystemServer的诞生,本文来看一下SystemServer中初始化的系统服务。
1.AccountManagerService
Android账户服务,提供了对账户、密码、授权的集中管理。
2.AccessibilityManagerService
辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果,View的点击、焦点等事件分发管理服。
3.ActivityManagerService
Android framework框架核心服务,管理整个框架中任务、进程管理, Intent解析等的核心实现,管理四大组建的生命周期。
4.AlarmManagerService
提供闹铃和定时器等功能。
5.AppWidgetService
Android中提供Widget的管理和相关服务
6.AssetAtlasService
负责将预加载的bitmap组装成纹理贴图,生成的纹理贴图可以被用来跨进程使用,以减少内存。
7.AudioService
AudioFlinger的上层管理封装,主要是音量、音效、声道及铃声等的管理。
8.BackupManagerService
备份服务。
9.BatteryService
负责监控电池的充电状态、电池电量、电压、温度等信息,当电池信息发生变化时,发生广播通知其他关系电池信息的进程和服务。
10.BluetoothManagerService
负责蓝牙后台管理和服务。
11.ClipboardService
剪贴板服务。
12.CommonTimeManagementService
管理本地常见的时间服务的配置,在网络配置变化时重新配置本地服务。
13.ConnectivityService
网络连接状态服务。
14.ContentService
内容服务,主要是数据库等提供解决方法的服务。
15.ConsumerIrService
远程控制,通过红外等控制周围的设备(例如电视等)
16.CountryDetectorService
检测用户国家
17.DevicePolicyManagerService
提供一些系统级别的设置及属性
18.DiskStatsService
磁盘统计服务,供dumpsys使用
19.DisplayManagerService
用于管理全局显示生命周期,决定在已连接的物理设备如何配置逻辑显示,并且通知系统和应用状态的改变。
20.DreamManagerService
屏幕保护。
21.DropBoxManagerService
用于系统运行时日志的存储于管理。
22.IdleMaintenanceService
用于观察设备状态,在设备空闲时执行维护任务。将一些比较耗时的代价比较高的任务放到设备空闲时执行,这样保证用户的体验。
23.InputManagerService
以前在WindowManagerService中,现在独立了出来,用户处理事件分发。
24.InputMethodManagerService
输入法服务,打开和关闭输入法。
25.LightsService
光感应传感器服务。
26.LocationManagerService
位置服务,GPS、定位等。
27.LockSettingsService
和锁屏界面中的输入密码,手势等安全功能有关。可以保存每个user的相关锁屏信息。
28.WallpaperManagerService
壁纸管理服务。
29.MountService
磁盘加载服务程序,一般要和一个linux daemon程序如vold/mountd等合作起作用,主要负责监听并广播device的mount/unmount/badremoval等等事件。
30.NetworkManagementService
网络管理服务。ANDROID 系统网络连接和管理服务由四个系统服务ConnectivityService、NetworkPolicyManagerService、NetworkManagementService、NetworkStatsService共同配合完成网络连接和管理功能。ConnectivityService、NetworkPolicyManagerService、NetworkStatsService三个服务都通过INetworkManagementService接口跨进程访问NetworkManagementService服务,实现与网络接口的交互及信息读取。
31.NetworkPolicyManagerService
维护网络使用策略。
32.NetworkStatsService
网络统计相关。
33.NetworkTimeUpdateService
监视网络时间,当网络时间变化时更新本地时间。
34.NotificationManagerService
通知服务。
35.NsdService
网络服务搜索
36.PackageManagerService
Android framework框架核心服务,用于APK的解析、权限验证、安装等。
37.PrintManagerService
打印服务。
38.PowerManagerService
电源管理服务。
39.RecognitionManagerService
身份识别相关。
40.SamplingProfilerService
用于耗时统计等。
41.SearchManagerService
搜索服务。
42.SchedulingPolicyService
调度策略。
43.SerialService
对串口的设备进行操作
44.StatusBarManagerService
状态栏。
45.TelephonyRegistry
提供电话注册、管理服务,可以获取电话的链接状态、信号强度等等。
46.TextServicesManagerService
文本服务,例如文本检查等。
47.TwilightService
指出用户当前所在位置是否为晚上,被UiModeManager等用来调整夜间模式。
48.UiModeManagerService
管理当前Android设备的夜间模式和行车模式.。
49.UsbService
USB Host和device管理服务。
50.VibratorService
振动器服务。
51.WifiP2pService
Wifi Direct服务。
52.WifiService
Wifi服务。
53.WindowManagerService
Android framework框架核心服务,窗口管理服务。
54.WiredAccessoryManager
监视手机和底座上的耳机。