Skip to content

系统服务

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鸿蒙
服务管理SystemServiceManagerSA Manager(SystemAbility)
服务注册Java 注册C++ register + SA 注册
服务发现getServiceByName()getSystemAbility()
通信机制Binder IPCPort + MQ / RPC
服务框架AIDL + Bindersystem_ability + IPC
生命周期onCreate/onDestroyOnStart/OnStop
服务分组Group/CategorySystemAbility ID 范围
服务权限权限组 + SELinuxTokenID + 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 体系。