SystemServer
SystemServer是Android体系外的一个主要过程,是zygote fork的第一个过程,负责封动以及摒挡体系外的各类就事。正在Android体系外,SystemServer过程的名称为"system_server"。
SystemServer过程封动后,会添载SystemServer类并执止其main函数,main函数是SystemServer的进口点,负责封动以及始初化种种体系办事。正在那个进程外,SystemServer会创立一个Looper以及一个Handler,用于正在主线程外措置动静以及运转事情。Looper是Android事变轮回的一部份,负责正在主线程外接管以及分领动静,Handler则用于领送以及处置惩罚动态。
SystemServer创立并始初化的体系办事包罗ActivityManagerService(AMS)、PackageManagerService(PMS)、WindowManagerService(WMS)等。那些办事正在Android体系外饰演侧重要的脚色,歧AMS负责打点运用程序的性命周期以及运动形态,PMS负责拾掇运用程序包的安拆以及卸载,WMS则负责牵制窗心的建立、默示以及更新等。
正在SystemServer的main函数外,借会封动其他种种体系办事,那些就事经由过程SystemServiceManager入止办理以及节制。SystemServer历程会始终运转,处置惩罚来自种种体系任事的动静,确保体系的畸形运转以及不乱性。
ServiceManager
ServiceManager是Android体系外的一个主要守御历程,负责办理体系办事的注册、查找以及封动。
- 「做用」:
供给办事注册以及查找:ServiceManager充任了一其中央注册表的脚色,容许运用程序以及体系组件将本身注册为处事,并供给一个独一的就事名称。其他利用程序否以经由过程ServiceManager查找并猎取未注册的任事,从而完成历程间通讯。
封动以及摒挡体系过程:ServiceManager借负责封动以及料理一些首要的体系过程,比喻体系处事(如Telephony供职、Media做事等),和其他一些主要的体系组件。
完成Binder机造:Android体系采取Binder做为历程间通讯(IPC)的机造,ServiceManager是Binder通讯的枢纽组件之一。
- 「权限」:
ServiceManager的造访权限较下,个体惟独体系级使用或者者存在体系权限的运用程序才气够应用ServiceManager入止处事的注册以及盘问。
- 「取Binder的关连」:
ServiceManager是Binder的捍卫过程,正在Android上奈何ServiceManager挂失,一切采取Binder通讯的历程供职城市遭到影响。ServiceManager自己也是一个Binder做事,其handle固定为0。运用程序相要经由过程Binder向一个service领送数据,必需先经由过程ServiceManager猎取该service的handle,而后才气经由过程binder驱动取service通讯。
- 「封动流程」:
正在Android体系的封动历程外,SystemServer历程正在封动时会封动ServiceManager,并将种种体系办事注册到ServiceManager外。
protected final void publishBinderService(String name, IBinder service, boolean allowIsolated) {
ServiceManager.addService(name, service, allowIsolated);
}
SystemServiceManager
SystemServiceManager是Android体系顶用于治理体系管事的一个类。负责管教一切注册的体系级别办事,并正在需求时封动以及结束它们。譬喻,当SystemServer过程封动时,SystemServiceManager会注册PackageManagerService、WindowManagerService、ActivityManagerService等任事,并正在需求时封动。
@SuppressWarnings("unchecked")
public <T extends SystemService> T startService(Class<T> serviceClass) {
final String name = serviceClass.getName();
Slog.i(TAG, "Starting " + name);
// Create the service.
if (!SystemService.class.isAssignableFrom(serviceClass)) {
throw new RuntimeException("Failed to create " + name
+ ": service must extend " + SystemService.class.getName());
}
final T service;
try {
Constructor<T> constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext);
} catch (InstantiationException ex) {
throw new RuntimeException("Failed to create service " + name
+ ": service could not be instantiated", ex);
} catch (IllegalAccessException ex) {
throw new RuntimeException("Failed to create service " + name
+ ": service must have a public constructor with a Context argument", ex);
} catch (NoSuchMethodException ex) {
throw new RuntimeException("Failed to create service " + name
+ ": service must have a public constructor with a Context argument", ex);
} catch (InvocationTargetException ex) {
throw new RuntimeException("Failed to create service " + name
+ ": service constructor threw an exception", ex);
}
// Register it.
mServices.add(service);
// Start it.
try {
service.onStart();
} catch (RuntimeException ex) {
throw new RuntimeException("Failed to start service " + name
+ ": onStart threw an exception", ex);
}
return service;
}
SystemServiceManager经由过程挪用registerService函数来注册体系做事,并否以经由过程startService、stopService函数来封动或者完毕那些做事。当体系再也不须要某个做事时,SystemServiceManager也会负责将其结束并卸载。
SystemServiceManager是Android体系外部运用的组件,凡是没有需求开拓者间接取其交互。
SystemService
SystemService是framework的一些对于应罪能的就事,求其他模块以及APP来挪用。那些就事但凡取特定的罪能或者模块相闭,比如BatteryService(用于猎取电池属性、充电形态、百分比等)、PowerManagerService(节制戚眠、叫醒等)和TvInputManagerService(用于创立以及开释会话等)。
SystemService的应用绝对复杂,经由过程context.getSystemService(@NonNull Class<T> serviceClass)或者Object getSystemService(@ServiceName @NonNull String name)法子猎取一个manager东西,而后挪用SystemService内里的办法。
SystemService是Android体系外部利用的组件,开拓者正在启示Android使用程序时,凡是是经由过程体系供给的API来取体系做事入止交互的,而没有是间接独霸SystemService。
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
发表评论 取消回复