继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android源码のFramework框架层

MYYA
关注TA
已关注
手记 435
粉丝 75
获赞 326
目录:
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();

系统服务的启动顺序
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二者通过代理模式实现交互。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】



作者:傲娇小野猫
链接:https://www.jianshu.com/p/4ad1f3fc815d


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP