3.2.2 Service群英会
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的内容,就留给读者自己分析了。
后面,将逐次分析这第五类服务的其他几项服务。