
引言电源管理是移动操作系统的基石能力。从用户开启省电模式延长续航到游戏手机切换到性能模式释放全部算力背后都是系统电源策略在发挥作用。HarmonyOS NEXT 通过ohos.power模块向应用层暴露了电源状态查询能力让开发者能够感知设备的电源模式、屏幕状态和待机情况。本文是设备状态感知系列的第三篇——前两篇分别介绍了电池健康ohos.batteryInfo和温控管理ohos.thermal本篇聚焦电源模式ohos.power。三个模块共同构成了设备状态感知的基础能力矩阵设备状态铁三角 ├── ohos.batteryInfo → 电池是什么状态电量/健康/温度 ├── ohos.thermal → 系统该怎么做温控等级/降级策略 └── ohos.power → 用户选择了什么电源模式/省电策略本文将创建一个电源管理实验室Demo深入讲解ohos.power的三个核心 API 和五种电源模式。ohos.power 模块概述ohos.power是 HarmonyOS NEXT 提供的电源管理模块位于kit.BasicServicesKit。它的定位非常清晰提供设备电源状态和模式的同步查询能力。导入方式importpowerfromohos.power;API 总览API返回值类型说明isActive()boolean同步检测设备是否活跃屏幕是否亮起isStandby()boolean同步检测设备是否处于待机模式API 10getPowerMode()DevicePowerMode同步获取当前电源模式isScreenOn()Promiseboolean异步【已废弃】检测屏幕状态建议用isActiverebootDevice()void同步【已废弃】重启设备需ohos.permission.REBOOT关键特性与ohos.batteryInfo一样核心 API 全部同步返回。这是系统状态查询类 API 的典型设计——对于瞬息万变的设备状态同步查询避免了异步调度的延迟。DevicePowerMode 枚举这是ohos.power最核心的类型定义了设备支持的电源模式枚举值数值含义典型场景MODE_NORMAL600标准模式日常使用——所有功能正常MODE_POWER_SAVE601省电模式电量较低——后台受限、亮度降低MODE_PERFORMANCE602性能模式游戏/渲染——CPU/GPU 满频MODE_EXTREME_POWER_SAVE603超级省电电量告急——仅核心功能MODE_CUSTOM_POWER_SAVE650自定义省电API 20 — 用户自定义策略枚举值为何从 600 开始这是 HarmonyOS 的设计惯例——给枚举值分配较大的间隔数值便于未来在中间插入新模式而不打乱编号。例如如果将来需要轻度省电模式可能会分配 604~649 之间的值。核心 API 详解1. isActive() — 屏幕活跃状态functionisActive():boolean;这是最常用的电源 API。它同步返回设备是否处于活跃状态——即屏幕是否亮起、用户是否正在与设备交互。与 Android 的对比Android 需要通过PowerManager.isInteractive()或监听Intent.ACTION_SCREEN_ON/OFF广播才能获取屏幕状态。HarmonyOS 的isActive()比 Android 的广播机制更简单直接——一行同步代码即可。if(power.isActive()){// 屏幕亮着可以播放动画this.startAnimation();}else{// 屏幕已熄暂停非必要渲染this.pauseRendering();}注意事项isActive()返回true表示屏幕亮且用户可交互屏幕亮但锁屏状态下也返回true屏幕确实亮着此 API 替代了已废弃的isScreenOn()后者需要回调或 Promise2. isStandby() — 待机模式检测functionisStandby():boolean;isStandby()是 API 10 新增的方法用于检测设备是否进入待机idle模式。待机模式与息屏不同息屏屏幕熄灭但 CPU 仍在运行应用可以继续后台任务待机设备进入深度空闲状态网络可能受限后台任务被严格管控if(power.isStandby()){// 设备在待机推迟非紧急网络请求this.deferNetworkRequests();}else{// 设备活跃正常执行this.scheduleBackgroundSync();}实际意义isStandby()对于后台任务调度非常有用。当设备进入待机你的后台同步、数据预取等操作应该推迟因为系统可能随时断开网络来省电。3. getPowerMode() — 电源模式查询functiongetPowerMode():DevicePowerMode;这是最能体现用户意图的 API。电源模式反映了用户或系统对设备性能与续航之间权衡的选择constmode:power.DevicePowerModepower.getPowerMode();if(modepower.DevicePowerMode.MODE_PERFORMANCE){// 性能模式 → 画质拉满this.setGraphicsQuality(ULTRA);}elseif(modepower.DevicePowerMode.MODE_POWER_SAVE||modepower.DevicePowerMode.MODE_EXTREME_POWER_SAVE){// 省电模式 → 自动降画质this.setGraphicsQuality(LOW);}else{// 标准模式 → 默认画质this.setGraphicsQuality(MEDIUM);}五种模式的行为差异行为标准省电性能超级省电自定义CPU 频率正常受限满频最低用户定GPU 频率正常受限满频最低用户定后台活动正常受限正常几乎禁止用户定屏幕亮度自适应降低最高最低用户定振动反馈正常减少正常关闭用户定网络同步正常延迟正常暂停用户定4. shutdown() 和 reboot() — 需要系统权限functionshutdown(reason:string):void;// 需要 ohos.permission.REBOOTfunctionreboot(reason:string):void;// 需要 ohos.permission.REBOOT这两个方法需要ohos.permission.REBOOT权限属于系统级权限普通应用无法获取。Demo 页面不涉及这两个 API但它们体现了ohos.power模块的完整能力——从状态感知到行为控制。实战电源管理实验室页面结构设计┌─────────────────────────────────┐ │ 电源管理实验室 ohos.power │ ← 标题栏#6366F1 靛蓝 ├─────────────────────────────────┤ │ 当前电源模式 │ │ ┌─────────────────────────┐ │ │ │ ┌──┐ │ │ ← 模式图标 名称 详细描述 │ │ │⚡│ 性能模式 │ │ │ │ └──┘ CPU/GPU 满频运行... │ │ │ └─────────────────────────┘ │ ├─────────────────────────────────┤ │ 设备运行状态 │ │ ┌──────────┐ ┌──────────┐ │ ← 双栏面板 │ │ ● 亮屏 │ │ ● 活跃 │ │ 绿亮屏/活跃 │ │ 屏幕亮起 │ │ 未待机 │ │ 红息屏/待机 │ └──────────┘ └──────────┘ │ ├─────────────────────────────────┤ │ 电源模式一览 │ │ ┌─────────────────────────┐ │ │ │ ● 标准模式 ◀ 当前 NORMAL│ │ ← 5种模式对照表 │ │ ─────────────────────── │ │ 当前模式高亮标记 │ │ ○ 省电模式 POWER_SAVE│ │ │ │ ○ 性能模式 PERFORMANCE│ │ │ │ ○ 超级省电 EXTREME...│ │ │ │ ○ 自定义省电 CUSTOM │ │ │ └─────────────────────────┘ │ ├─────────────────────────────────┤ │ [ 刷新电源状态 ] │ ├─────────────────────────────────┤ │ 电源日志 │ └─────────────────────────────────┘关键实现细节模式比较枚举值匹配Demo 中最关键的设计是当前模式高亮机制。五种电源模式在列表中展示当前激活的模式需要视觉突出privateisModeActive(modeConst:number):boolean{returnthis.powerModemodeConst;}在Builder modeRow中根据isModeActive的结果动态切换颜色、字重和显示◀ 当前标记Text(label).fontSize(12).fontColor(this.isModeActive(modeConst)?color:#0F172A).fontWeight(this.isModeActive(modeConst)?FontWeight.Bold:FontWeight.Normal)if(this.isModeActive(modeConst)){Text( ◀ 当前).fontSize(9).fontColor(color).fontWeight(FontWeight.Bold)}CUSTOM_POWER_SAVE 的特殊处理MODE_CUSTOM_POWER_SAVE的枚举值是 650API 20 新增而其他模式的枚举值在 600~603。由于它是较新的 API在旧版本设备上getPowerMode()不会返回这个值。代码中需要硬编码数值进行比较if(mode(650aspower.DevicePowerMode)){this.powerModeLabel自定义省电;this.powerModeDesc用户自定义的省电策略...;}使用650 as power.DevicePowerMode而不是直接650是因为 ArkTS 严格模式不允许数字直接与枚举比较——尽管它们在运行时是同一个值。实际应用场景场景 1根据电源模式自适应画质游戏类应用最经典的需求——性能模式全特效省电模式降画质privateapplyPowerBasedSettings():void{constmode:power.DevicePowerModepower.getPowerMode();switch(mode){casepower.DevicePowerMode.MODE_PERFORMANCE:this.setFrameRate(120);this.setShadowQuality(HIGH);this.setAntiAliasing(MSAA_4X);break;casepower.DevicePowerMode.MODE_NORMAL:this.setFrameRate(60);this.setShadowQuality(MEDIUM);this.setAntiAliasing(FXAA);break;casepower.DevicePowerMode.MODE_POWER_SAVE:this.setFrameRate(30);this.setShadowQuality(LOW);this.setAntiAliasing(OFF);break;casepower.DevicePowerMode.MODE_EXTREME_POWER_SAVE:this.setFrameRate(30);this.setShadowQuality(OFF);this.setAntiAliasing(OFF);break;}}场景 2屏幕熄灭后暂停传感器采集传感器密集型应用如计步器、导航应在屏幕熄灭后降低采样频率privateadjustSensorSampling():void{if(power.isActive()){// 屏幕亮正常频率sensor.startSampling(100);// 100ms 间隔}else{// 屏幕熄降低频率省电sensor.startSampling(1000);// 1s 间隔}}场景 3待机模式下推迟后台同步待机状态下系统会断开网络以省电此时触发网络请求可能失败或唤醒设备privateschedulePeriodicSync():void{if(power.isStandby()){// 待机中推迟 30 分钟再试this.rescheduleSync(30*60*1000);}else{// 非待机立即同步this.performSync();}}完整代码import{router}fromkit.ArkUI;importpowerfromohos.power;import{FontSize,Spacing}from../common/Constants;interfaceEventLog{time:string;msg:string;}EntryComponentstruct PowerLabPage{StateisScreenActive:booleanfalse;StateisStandby:booleanfalse;StatepowerMode:number-1;StatepowerModeLabel:string—;StatepowerModeDesc:string;StatepowerModeIcon:string;StateeventLogs:EventLog[][];Stateloading:booleantrue;aboutToAppear():void{this.loadPower();}privateloadPower():void{this.addLog(开始读取电源状态...);try{this.isScreenActivepower.isActive();this.isStandbypower.isStandby();constmode:power.DevicePowerModepower.getPowerMode();this.powerModemode;this.updateModeUI(mode);this.addLog(屏幕状态: (this.isScreenActive?亮屏:息屏));this.addLog(待机状态: (this.isStandby?待机中:活跃));this.addLog(电源模式: this.powerModeLabel);this.loadingfalse;}catch(e){this.loadingfalse;this.addLog(读取电源信息失败);}}privateupdateModeUI(mode:power.DevicePowerMode):void{if(modepower.DevicePowerMode.MODE_NORMAL){this.powerModeLabel标准模式;this.powerModeDescCPU/GPU 满频运行亮度自适应所有服务正常运作。适合日常使用场景。;this.powerModeIcon;}elseif(modepower.DevicePowerMode.MODE_POWER_SAVE){this.powerModeLabel省电模式;this.powerModeDesc限制后台活动降低屏幕亮度减少振动和动画效果。延长续航。;this.powerModeIcon;}elseif(modepower.DevicePowerMode.MODE_PERFORMANCE){this.powerModeLabel性能模式;this.powerModeDescCPU/GPU 超频运行屏幕高刷新率所有性能限制解除。适合游戏和专业应用。;this.powerModeIcon⚡;}elseif(modepower.DevicePowerMode.MODE_EXTREME_POWER_SAVE){this.powerModeLabel超级省电;this.powerModeDesc仅保留电话、短信等核心功能关闭所有非必要服务。最大化续航。;this.powerModeIcon;}elseif(mode(650aspower.DevicePowerMode)){this.powerModeLabel自定义省电;this.powerModeDesc用户自定义的省电策略部分限制条件由用户自行选择配置。API 20。;this.powerModeIcon⚙️;}else{this.powerModeLabel未知模式;this.powerModeDesc无法识别当前电源模式可能为新版系统引入的模式。;this.powerModeIcon❓;}}privatemodeColor():string{if(this.powerModepower.DevicePowerMode.MODE_NORMAL)return#10B981;if(this.powerModepower.DevicePowerMode.MODE_POWER_SAVE)return#F59E0B;if(this.powerModepower.DevicePowerMode.MODE_PERFORMANCE)return#EF4444;if(this.powerModepower.DevicePowerMode.MODE_EXTREME_POWER_SAVE)return#F97316;if(this.powerMode(650aspower.DevicePowerMode))return#6366F1;return#94A3B8;}// ... addLog、isModeActive、build 等方法参见项目源码}权限说明API所需权限isActive()无需权限isStandby()无需权限getPowerMode()无需权限shutdown()ohos.permission.REBOOT系统权限reboot()ohos.permission.REBOOT系统权限普通应用只能使用前三个查询 API关机/重启需要系统签名权限仅系统应用可用。与前四篇的对比模式识别本文是鸿蒙新特性系列的第五篇。回顾前四篇我们已经覆盖了 BasicServicesKit 中四个核心模块。它们共同组成的设备状态感知矩阵值得一览篇次模块感知维度异步模式典型场景#1ohos.window窗口属性与方向Promise全屏/分屏适配#2ohos.wifiManager网络连接状态Promise网络状态诊断#3ohos.batteryInfo电池电量与健康同步常量电池健康监控#4ohos.thermal设备温控等级同步 Callback热感知降级#5ohos.power电源模式与状态同步常量模式自适应前三篇分别覆盖了窗口用户看到的、网络设备连接的、电池支撑这一切的第四篇和本篇进一步延伸到了温度和电源策略——两个直接影响用户体验但常被忽视的维度。总结本文深入讲解了 HarmonyOS NEXT 中ohos.power模块的核心用法三个同步 APIisActive()、isStandby()、getPowerMode()——全是同步查询零异步开销。五种电源模式从标准到超级省电从性能到自定义覆盖了设备功耗管理的全部策略。理解这些模式的差异有助于在应用中做出更智能的资源调度决策。屏幕感知编程isActive()是最基础也是最常用的 API——屏幕亮起时渲染屏幕熄灭时休眠。这是移动应用性能优化的第一课。待机意识isStandby()API 10为后台任务调度提供了精细化的时机判断——在待机状态下推迟非紧急任务既能省电又不影响用户体验。设备状态铁三角batteryInfo电池状态 thermal温控策略 power电源模式构成了完整的设备感知链路让应用能够做出从被动响应到主动适应的跨越。掌握ohos.power你的应用就能根据设备的电源状态做出智能调整——在性能模式下释放全部算力在省电模式下优雅降级在屏幕熄灭后安静休眠。这正是用户友好型应用应具备的品质。