Appearance
系统服务
1. 系统服务架构
1.1 系统服务分层
系统服务架构:
┌──────────────────────────────────────────────┐
│ 框架层(Framework) │
│ ├── ArkUI Framework │
│ ├── ArkTS Runtime │
│ └── ArkBridge(ArkTS ↔ C++ 桥接) │
├──────────────────────────────────────────────┤
│ 系统服务层(System Services) │
│ ├── 核心系统服务 │
│ │ ├── AMS (Ability Management Service) │
│ │ ├── WMS (Window Management Service) │
│ │ ├── PMS (Package Management Service) │
│ │ └── IMS (Input Manager Service) │
│ ├── 扩展系统服务 │
│ │ ├── NMS (Notification Management) │
│ │ ├── BMS (Battery Management) │
│ │ ├── DAS (Distributed Ability Service) │
│ │ └── HWS (Hardware Sensor Service) │
│ └── 第三方服务 │
│ └── 通过 system_ability_register 注册 │
├──────────────────────────────────────────────┤
│ 服务管理(SA Manager) │
│ ├── system_ability_manager │
│ ├── service_registry │
│ └── capability_manager │
├──────────────────────────────────────────────┤
│ HDF 驱动层 │
│ ├── DriverFramework │
│ └── HAL │
└──────────────────────────────────────────────┘1.2 系统服务注册与发现
cpp
// 系统服务通过 SystemAbility 框架注册
// 注册服务(C++ 端)
static_cast<void>(SystemAbilityManagerClient::GetInstance())
.AddSystemAbility("media.player", "media_player", "systemability");
// 发现服务(C++ 端)
sp<ISystemAbility> service = SystemAbilityManagerClient::GetInstance()
.GetSystemAbility("media.player");
// ArkTS 端调用系统服务
import { systemAbility } from '@kit.AbilityKit';
// 绑定系统服务
async function bindService(serviceId: number) {
const daAbility = await systemAbility.createDAAbility({
want: {
deviceId: '',
bundleName: 'com.huawei.system',
abilityName: 'SystemServiceAbility'
},
callback: {
onConnect: () => console.log('Service connected'),
onDisconnect: () => console.log('Service disconnected')
}
});
}2. 核心系统服务
2.1 AMS(Ability Management Service)
AMS 核心职责:
├── Ability 生命周期管理(create/destroy)
├── Ability 栈管理(返回栈/任务栈)
├── Ability 启动调度(启动模式/意图解析)
├── Ability 进程管理(进程创建/回收)
├── Ability 状态同步(前台/后台切换)
└── Ability 跨设备迁移(分布式)2.2 WMS(Window Management Service)
WMS 核心职责:
├── 窗口生命周期管理
├── 窗口布局计算(测量/布局/绘制)
├── 窗口动画管理(WindowAnimation)
├── 窗口栈管理(任务栏/浮动窗口)
├── 窗口安全控制(截图/录屏权限)
└── 多窗口管理(分屏/浮动)2.3 PMS(Package Management Service)
PMS 核心职责:
├── 应用包安装/卸载/更新
├── 权限管理(权限组/权限策略)
├── 组件解析(manifest 解析)
├── 签名验证
├── 包信息查询(包列表/安装信息)
└── 模块管理(HAR/HSP 模块解析)2.4 IMS(Input Manager Service)
IMS 核心职责:
├── 输入事件采集(触摸/键盘/手柄)
├── 输入事件分发(到目标窗口)
├── 输入法管理(软键盘/硬件键盘)
├── 手势识别(滑动/长按/双击)
└── 事件拦截(拦截敏感事件)3. 系统能力调用
3.1 AbilityKit 系统能力
arkts
import { app, common } from '@kit.AbilityKit';
// 1. 获取应用上下文
const context = this.getApplicationContext();
// 2. 启动 Ability
await context.startAbility({
bundleName: 'com.example.target',
abilityName: 'TargetAbility',
parameters: {
key1: 'value1',
key2: 100
}
});
// 3. 获取系统配置
const config = context.configuration;
console.log(`Language: ${config.language}`);
console.log(`Region: ${config.country}`);
// 4. 应用生命周期回调
class MyApplication extends Application {
onCreate() {
console.log('Application created');
}
onWindowStageCreate(windowStage: app.WindowStage) {
// 创建 UI
windowStage.loadContent('pages/Index', (err) => {
if (err) {
console.error('Failed to load content');
return;
}
});
}
}3.2 common 模块系统能力
arkts
import { common } from '@kit.AbilityKit';
// 1. 获取设备信息
const deviceInfo = common.getDeviceSync();
console.log('Device ID: ' + deviceInfo.deviceId);
// 2. 应用状态管理
await common.setAppState({
state: common.AppState.BACKGROUND
});
// 3. 配置更新通知
common.on('configurationUpdated', (config) => {
console.log('Config changed: ' + config.language);
});3.3 系统事件监听
arkts
// 监听系统事件
import { appEvent } from '@kit.AbilityKit';
// 1. 电池状态变化
appEvent.on('battery', (data: appEvent.BatteryEvent) => {
if (data.state === appEvent.BatteryState.CHARGING) {
console.log('Battery charging: ' + data.level + '%');
}
});
// 2. 网络状态变化
appEvent.on('network', (data: appEvent.NetworkEvent) => {
console.log('Network changed: ' + data.type);
});
// 3. 时间/时区变化
appEvent.on('timeZone', (data: appEvent.TimeZoneEvent) => {
console.log('Timezone changed: ' + data.id);
});4. 系统服务获取方式
4.1 通过 system_ability 获取
arkts
import { systemAbility } from '@kit.AbilityKit';
// 获取系统服务代理
async function getSystemService(serviceName: string) {
const saManager = systemAbility.getSystemAbilityManager();
const service = saManager.getSystemAbility(serviceName);
return service;
}
// 常用系统服务名称
const SYSTEM_SERVICES = {
'abilityManager': 'ability_manager',
'windowManager': 'window_manager',
'packageManager': 'package_manager',
'inputManager': 'input_manager',
'notificationManager': 'notification_manager',
'deviceManager': 'device_manager',
'batteryManager': 'battery_manager',
'screenManager': 'screen_manager',
};4.2 通过 Kit API 获取
arkts
// 大部分系统能力通过 @kit.* 模块提供
// 1. 设备管理
import { deviceInfo } from '@kit.DeviceKit';
const deviceModel = deviceInfo.getDeviceModel();
const deviceBrand = deviceInfo.getDeviceBrand();
// 2. 网络管理
import { net } from '@kit.NetworkKit';
const networkInfo = net.getNetworkInfo();
// 3. 传感器
import { sensor } from '@kit.SensorKit';
sensor.on(sensor.SensorType.ACCELEROMETER, (data) => {
console.log('Accel: x=' + data.x + ' y=' + data.y + ' z=' + data.z);
});
// 4. 相机
import { camera } from '@kit.CameraKit';
const cameraManager = camera.getCameraManager();5. 自定义系统服务
5.1 创建自定义系统服务
cpp
// C++ 端:自定义系统服务
class MyCustomService : public ISystemAbility {
public:
MyCustomService(int32_t systemId, bool runningOnChildProcess)
: ISystemAbility(systemId, runningOnChildProcess) {}
virtual void OnStart() override {
// 服务启动逻辑
SA_HILOGI("MyCustomService started");
}
virtual void OnStop() override {
// 服务停止逻辑
SA_HILOGI("MyCustomService stopped");
}
virtual bool ProcessRequest(uint32_t code,
const MessageParcel& data,
MessageParcel& reply,
MessageOption& option) override {
switch (code) {
case CMD_GET_DATA:
// 处理请求
reply.WriteString8("Hello from custom service");
return true;
default:
return ISystemAbility::ProcessRequest(code, data, reply, option);
}
}
};
// 注册服务
REGISTER_SYSTEM_ABILITY_BY_ID(MyCustomService, 1001, true);5.2 调用自定义服务
arkts
// ArkTS 端:调用自定义系统服务
import { rpc } from '@kit.BasicServicesKit';
async function callCustomService() {
const service = await rpc.SystemAbilityManager.getInstance()
.getSystemAbility(1001);
// 通过 IPC 调用
const result = await service.invoke({
code: 1001, // CMD_GET_DATA
data: {}
});
console.log('Result: ' + result);
}6. 系统服务 vs Android 系统服务
| 维度 | Android | 鸿蒙 |
|---|---|---|
| 服务管理 | SystemServiceManager | SA Manager(SystemAbility) |
| 服务注册 | Java 注册 | C++ register + SA 注册 |
| 服务发现 | getServiceByName() | getSystemAbility() |
| 通信机制 | Binder IPC | Port + MQ / RPC |
| 服务框架 | AIDL + Binder | system_ability + IPC |
| 生命周期 | onCreate/onDestroy | OnStart/OnStop |
| 服务分组 | Group/Category | SystemAbility ID 范围 |
| 服务权限 | 权限组 + SELinux | TokenID + ATM + SELinux |
7. 🎯 面试高频考点
Q1: 鸿蒙的系统服务架构与 Android 的 SystemServer 有什么区别?
答要点:
- 鸿蒙通过 SA Manager 管理服务,Android 通过 SystemServiceManager
- 鸿蒙服务用 C++ 实现,Android 服务用 Java 实现
- 鸿蒙通过 system_ability_register 注册,Android 通过 addService
- 鸿蒙支持跨设备分布式服务,Android 服务局限于本地
- 鸿蒙服务生命周期由 OnStart/OnStop 管理,Android 由 onCreate/onDestroy
Q2: 如何获取和调用系统服务?
答要点:
- C++ 端:通过 SA Manager 的 getSystemAbility 获取
- ArkTS 端:通过 @kit.* 模块直接调用(封装好的高层 API)
- 跨 Ability:通过 startAbility + Want 参数传递
- 服务注册:通过 REGISTER_SYSTEM_ABILITY_BY_ID 注册
- 权限验证:调用时 ATM 自动检查 TokenID 权限
💡 面试提示:掌握 SA Manager 架构、AMS/WMS/PMS 核心服务职责、系统能力调用方式。对比 Android 的 SystemServiceManager + Binder 体系。