设备健康监测(DeviceHealth)
介绍
本篇 Codelab 基于 OpenHarmony ArkTS Stage 模型,实现了设备健康状态的实时监控与历史记录展示,涵盖以下功能:
- 电池状态监控与低电量预警
- 网络连接状态监控
- 存储空间监控与不足预警
- 屏幕状态变化监控
- 事件日志持久化存储与查询
- 用户配置管理(阈值、开关、通知等)
应用通过 系统能力订阅 + 数据库存储 + UI 实时渲染 的方式,实现设备状态的可视化监测。效果如下所示:

相关概念
-
偏好(Preferences) 用于存储用户配置项,如监控开关、阈值、通知设置等,支持持久化保存。
-
关系型数据库(RDBStore) 使用
@ohos.data.relationalStore实现事件日志的本地持久化存储,支持查询、分页与清理。 -
Stage 模型(UIAbility) 应用采用 Stage 模型架构,通过 UIAbility 管理生命周期与页面加载。
-
Router 路由机制 用于页面之间的跳转,如主页面进入各监控详情页。
-
系统能力 Provider 对系统能力(电池、网络、存储、屏幕)进行统一封装,向上提供订阅接口。
环境搭建
软件要求
- DevEco Studio:3.1 Release
- OpenHarmony SDK:API Version 9
硬件要求
- 设备类型:开发板或模拟器
- OpenHarmony 系统版本:3.2 Release 及以上
若仅进行 UI 预览,可使用 Previewer;完整功能验证需在模拟器或真机运行。
代码结构解读
entry/src/main/ets
├── entryability
│ └── EntryAbility.ets // 应用入口 Ability
├── pages
│ ├── MainPage.ets // 主页面(监控入口聚合)
│ ├── SettingsPage.ets // 设置页面
│ └── eventpages // 监控详情页
│ ├── BatteryPage.ets
│ ├── NetworkPage.ets
│ ├── StoragePage.ets
│ └── ScreenPage.ets
├── services
│ ├── MonitorCoreService.ets // 监控核心服务
│ ├── EventLogger.ets // 事件日志记录器
│ └── monitors // 各类系统监控器
├── database
│ └── EventDB.ets // 事件数据库封装
├── model
├── providers
│ ├── BatteryProvider.ets
│ ├── NetworkProvider.ets
│ ├── StorageProvider.ets
│ └── ScreenProvider.ets
└── manager
└── PreferenceManager.ets // 偏好项管理器
应用初始化
应用启动后,由 EntryAbility 负责完成全局初始化工作,包括:
- 设置系统颜色模式
- 初始化 Preferences(用户配置)
- 初始化事件数据库
- 启动系统监控核心服务
// EntryAbility.ets
onCreate() {
PreferenceManager.getInstance().init(this.context);
EventHubManager.getInstance().init(this.context);
}
在应用进入前台时,通过 MonitorCoreService.startAll() 启动所有监控模块。
主页面(MainPage)
主页面作为应用入口,用于聚合展示各监控模块的入口卡片。
功能说明
- 展示电池 / 网络 / 存储 / 屏幕 / 设置入口
- 实时展示当前电池电量摘要
- 点击卡片跳转至对应详情页面
页面跳转通过 Router 实现:
this.getUIContext().getRouter().pushUrl({
url: 'pages/eventpages/BatteryPage'
});
设置页面(SettingsPage)
设置页面用于统一管理用户配置项。
支持配置
- 电量预警阈值(Slider)
- 存储预警阈值(Slider)
- 网络监控开关
- 日志加密开关
- 通知提醒开关
- 恢复默认设置
技术实现
- 使用
@StorageLink与AppStorage双向绑定 - 配置修改后通过
PreferenceManager持久化到 Preferences - 配置变化可被监控核心模块实时感知
电池监控(BatteryPage)
功能说明
- 展示当前设备电量百分比
- 低电量时(≤20%)高亮预警
- 展示最近 20 条电量变化日志
实现流程
- 初始化 EventDB
- 获取电量快照,避免首屏 0% 闪烁
- 订阅电量变化
- 每次变化后刷新历史日志列表
await this.batteryProvider.subscribe((soc: number) => {
this.batteryLevel = soc;
this.refreshHistory();
});
网络监控(NetworkPage)
功能说明
- 实时展示网络连接状态
- 展示网络状态切换历史记录
- 按事件级别(INFO / WARN)区分显示
数据来源
- NetworkProvider 获取系统网络状态
- NetworkMonitor 后台写入 EventDB
- 页面从数据库查询历史日志
存储监控(StoragePage)
功能说明
- 展示当前可用存储空间(GB)
- 使用环形进度条可视化存储占用情况
- 展示最近 15 条存储变更日志
- 提供手动刷新按钮
屏幕监控(ScreenPage)
功能说明
- 实时监听屏幕点亮 / 熄灭 / 锁定 / 解锁事件
- 顶部拟物化屏幕状态展示
- 时间线方式展示历史日志
事件日志持久化(EventDB)
所有监控事件统一封装为事件日志记录,并写入数据库
事件日志记录数据结构
- type:事件类型(BATTERY / NETWORK / STORAGE / SCREEN)
- level:事件级别(INFO / WARN / ERROR)
- timestamp:事件时间戳
- message:事件描述
- payload:附加数据(JSON)
数据库支持:
- 自动建表与索引
- 按类型与时间查询
- 分页查询
- 历史日志清理
监控核心模块(MonitorCoreService)
MonitorCoreService 作为系统监控中枢,负责:
- 管理所有监控器生命周期
- 接收各监控器产生的事件
- 将事件写入数据库
- 触发全局告警事件(低电量 / 低存储)
并支持通过 MonitorOptions 注入 Provider 和存储实现,便于测试与扩展。