IT评测·应用市场-qidao123.com技术社区

标题: 鸿蒙NEXT开发【省电和深色模式下低功耗设计】功耗优化 [打印本页]

作者: 金歌    时间: 2024-11-29 21:09
标题: 鸿蒙NEXT开发【省电和深色模式下低功耗设计】功耗优化
低功耗优化概述

低功耗是指设备在运行各种使命时,通过接纳一系列技术和战略来低落设备的能耗,从而延长电池寿命和设备使用时间。由于手机等移动设备具有便携、移动的属性,其续航时间的长短直接影响用户对该品牌手机的体验和满足度。移动设备的续航时间越长,用户就可以更长时间地使用设备,无需频繁充电,在户外或旅行场景下提供便利。一样寻常而言,为了提供更长的续航时间,可以采取了多种技术和方法来低落功耗、优化电池管理,如优化软件算法、优化屏幕亮度和显示等。其中,省电模式和深色模式是手机功耗优化中常用的优化手段:

为了有效去测量手机运行时的功耗,DevEco Profiler提供及时监控(Realtime Monitor)能力,可资助开发者及时监控设备资源(如CPU、内存、FPS、GPU、Energy等)使用情况,其中Energy以3s为周期举行革新,表现统计周期内总功耗以及各耗能部件(包罗CPU、Display、GPU、Location、Other)的功耗占用情况。综合考虑业界共识指标和现实用户使用体验,实验将主要对比屏幕显示耗电量、CPU耗电量、GPU耗电量以及终极总耗电量,关键指标如下所示:

  
本文将以 “HMOS天下”APP 为例,通过设置省电模式和深色模式来验证差异场景下对手机功耗的影响,观察手机的电量斲丧变化情况。同时本文还探讨了主动低落应用亮度、停止冗余动画两项低落功耗的步伐,测试差异条件下的电量斲丧情况。实验结果表明:

通过设置省电模式、深色模式、调节屏幕亮度调节、停止冗余动画,终极测量的总耗电量对好比下图所示:
图1 总耗电量对比

功耗测量工具

DevEco Profiler

DevEco Profiler应用调优工具(以下简称为Profiler)内置集成在DevEco Studio内,提供场景化的调优体验,不仅方便开发者及时相识应用或服务的CPU、内存、图形等资源的使用情况,还提供了高效的问题定位能力,资助开发者快速定位到问题所在代码。使用Profiler测试应用程序功耗的方法如下所示:
Profiler耗电量表示图如下所示
图2 ProfilerEnergy模块表示图

说明

程控电源

程控电源是一种可以举行电压、电流、功率、电阻等参数控制的电源设备,它可以根据用户设定的参数来输出相应的电压和电流,从而满足差异的测试需求。程控电源可以通过编程控制来模拟差异的负载条件,从而测试应用程序在差异负载下的功耗表现。通过这种方式,开发人员可以更好地相识应用程序的能耗特性,从而针对性地举行优化。
使用程控电源测试应用程序功耗的方法如下所示:
省电模式

原理先容

HarmonyOS默认提供了电源模式的特性,主要分为以下三类:

  
说明
在电源管理方面,HarmonyOS接纳了自动切换配置,通过更改差异的配置项来实现差异的电源模式。例如,在正常模式下,系统会自动调节屏幕旋转,以保证用户在横屏和竖屏模式下都能够得到最佳的视觉结果;而在省电模式下,系统会关闭这一功能,以低落屏幕旋转带来的能耗。
场景案例

当设备电量较低时,系统可以切换至省电模式,以减少设备的能耗并延长电池的使用时间。通过与系统省电模式的配合,应用程序可以更加智能地调解自身的功耗战略,以顺应设备电量较低的情况,从而延长设备的续航时间,提供更加稳定和持久的使用体验。
一样寻常而言,获取当前设备的电源模式可以通过以下步骤实现:
图3 开启省电模式

在省电模式下,获取当前系统的电源模式的代码如下所示:
  1. import { router } from '@kit.ArkUI';
  2. import { common } from '@kit.AbilityKit';
  3. import { LearningResource, ActionButtonView, CommonConstants, ArticleCardButtonView } from '@ohos/common';
  4. // 引入power模块
  5. import { power } from '@kit.BasicServicesKit';
  6. @Component
  7. export struct ArticleCardView {
  8.   @Prop isLiked: boolean = false;
  9.   @Prop isCollected: boolean = false;
  10.   @ObjectLink articleItem: LearningResource;
  11.   onCollected?: () => void;
  12.   onLiked?: () => void;
  13.   build() {
  14.     Row({ space: CommonConstants.SPACE_16 }) {
  15.       Column() {
  16.         // ...
  17.         Row() {
  18.           ActionButtonView({
  19.             imgResource: $r('app.media.ic_eye_open'),
  20.             count: this.articleItem.viewsCount,
  21.             textWidth: $r('app.float.view_count_icon_width')
  22.           })
  23.           // 使用getPowerMode获取当前系统的电源模式,并判断当前是否为省电模式
  24.           if (power.getPowerMode() == power.DevicePowerMode.MODE_POWER_SAVE) {
  25.             ActionButtonView({
  26.               imgResource: this.isLiked ? $r('app.media.btn_good_on') : $r('app.media.btn_good_normal'),
  27.               count: this.articleItem.likesCount,
  28.               textWidth: $r('app.float.like_icon_width')
  29.             })
  30.               .onClick(() => {
  31.                 this.onLiked?.();
  32.               })
  33.             // ...
  34.           } else {
  35.             ArticleCardButtonView({
  36.               clickAnimationPath: 'common/lottie/liked_lottie.json',
  37.               cancelAnimationPath: 'common/lottie/cancel_liked_lottie.json',
  38.               isClicked: this.isLiked,
  39.               count: this.articleItem.likesCount,
  40.               articleId: this.articleItem.id,
  41.               textWidth: $r('app.float.like_icon_width'),
  42.               type: 'like',
  43.               onClicked: this.onLiked,
  44.               normalImage: $r('app.media.btn_like_normal'),
  45.               onImage: $r('app.media.btn_like_on')
  46.             })
  47.             // ...
  48.           }
  49.         }
  50.         .width(CommonConstants.FULL_PERCENT)
  51.         .justifyContent(FlexAlign.SpaceBetween)
  52.       }
  53.       .layoutWeight(1)
  54.       .height(CommonConstants.FULL_PERCENT)
  55.       .justifyContent(FlexAlign.SpaceAround)
  56.     }
  57.    }
  58. }
复制代码
功耗分析

同一界面下滑动列表项,分别对比正常模式和省电模式来测试关闭和开启省电模式情况下的总耗电量和CPU模块、GPU模块、显示模块的耗电量。终极,使用IDE的Profiler工具测量得到的数据如下所示:
图4 使用省电模式前后耗电量对比

从测试数据可以看出:
这一结果表明省电模式的使用对设备的节能有着明显的结果,通过低落亮度、开启自动调节亮度等方式,省电模式低落了显示模块的能耗,从而达到了低落总体能耗的目标。
深色模式

原理先容

通过启用深色模式,可以进一步实现能耗的低落。首先,深色模式使用更少的像素点和背光,因此能够减少能量的斲丧。其次,深色模式在OLED屏幕上可以关闭像素点,这一特性进一步减少了能耗。在现实开发过程中,应用必要根据当前设备状态来适配深色模式,开发者可以通过设置分层参数数据实现:
场景案例

在应用省电模式后,继续在“我的“界面下设计为深色模式可以在显示模块得到更大的收益,一样寻常而言应用深色模式可以通过以下步骤实现:
图6 深色模式表示图

功耗分析

同一界面下,分别对比测试关闭和开启深色模式情况下的总耗电量和CPU模块、GPU模块、Display模块的耗电量。终极,使用IDE的Profiler工具检测得到的数据如下所示:
图7 使用深色模式前后耗电量对比

根据测试数据分析,我们可以得出以下结论:
这一结果表明深色模式的使用对设备的团体能耗具有积极的影响,可以有效低落设备的能耗水平。深色模式通过减少必要点亮的像素点数目,从而有效低落了显示模块的功耗。
其他优化步伐

优化步伐先容

在省电模式和深色模式下,根据差异的应用场景,通常还有以下常用的优化方式:

通过采取以上常用的优化方式,可以在省电模式和深色模式下进一步低落设备的能耗,延长电池的使用时间,提升用户体验。同时,结合测试数据的结果,可以更加明白地相识差异优化方式对设备能耗的影响,从而更好地指导现实的优化工作。
场景案例

在设计和开发应用时,必要考虑差异的使用场景必要差异的优化步伐来低落功耗。例如,在运行视频应用程序时,可以接纳低落亮度、调解革新率和关闭不必要的背光等步伐来低落功耗。而在运行音频应用程序时,则可以接纳关闭不必要的传感器、减少CPU负载等步伐来低落功耗。结合场景按需选择优化步伐黑白常重要的,可以资助设备在差异的使用场景下提供最佳的性能和用户体验,并最大限度地低落功耗。

主动低落应用亮度总共分为以下几步:
在夜间模式下增长主动低落应用亮度,具体代码实现如下:
  1. export default class EntryAbility extends UIAbility {
  2.   ...
  3.   onWindowStageCreate(windowStage: window.WindowStage) {
  4.     ...
  5.     // 判断当前是否为深色模式
  6.     if (this.context?.config?.colorMode == ConfigurationConstant.ColorMode.COLOR_MODE_DARK) {
  7.       let windowClass = windowStage.getMainWindowSync();
  8.       try {
  9.         // 设置当前应用窗口亮度
  10.         windowClass.setWindowBrightness(0.2, (err) => {
  11.           if (err.code) {
  12.             console.error('Failed to set the brightness. Cause: ' + JSON.stringify(err));
  13.             return;
  14.           }
  15.           console.info('Succeeded in setting the brightness.');
  16.         });
  17.       } catch (exception) {
  18.         console.error('Failed to set the brightness. Cause: ' + JSON.stringify(exception));
  19.       }
  20.     }
  21.   }
  22.   ...
  23. }
复制代码

在HMOS天下App的案例中,点赞、收藏的动画在省电和深色模式下会斲丧更多的资源,可以主动关闭这些冗余动效,关闭的过程主要分以下几步:
图8 省电和深色模式下停止冗余动效

在省电模式下停止点赞、收藏动画,具体代码实现如下:
  1. import { router } from '@kit.ArkUI';
  2. import common from '@ohos.app.ability.common';
  3. import { LearningResource, ActionButtonView, CommonConstants, ArticleCardButtonView } from '@ohos/common';
  4. import { power } from '@kit.BasicServicesKit';
  5. @Component
  6. export struct ArticleCardView {
  7.   @Prop isLiked: boolean = false;
  8.   @Prop isCollected: boolean = false;
  9.   @ObjectLink articleItem: LearningResource;
  10.   onCollected?: () => void;
  11.   onLiked?: () => void;
  12.   build() {
  13.     Row({ space: CommonConstants.SPACE_16 }) {
  14.       Column() {
  15.         ...
  16.         Row() {
  17.           ActionButtonView({
  18.             imgResource: $r('app.media.ic_eye_open'),
  19.             count: this.articleItem.viewsCount,
  20.             textWidth: $r('app.float.view_count_icon_width')
  21.           })
  22.           // 判断是否为省电模式
  23.           if (power.getPowerMode() == power.DevicePowerMode.MODE_EXTREME_POWER_SAVE) {
  24.             // 设置点赞和收藏的图片
  25.             ActionButtonView({
  26.               imgResource: this.isLiked ? $r('app.media.btn_good_on') : $r('app.media.btn_good_normal'),
  27.               count: this.articleItem.likesCount,
  28.               textWidth: $r('app.float.like_icon_width')
  29.             })
  30.               .onClick(() => {
  31.                 this.onLiked?.();
  32.               })
  33.             ActionButtonView({
  34.               imgResource: this.isCollected ? $r('app.media.btn_favorites_on') : $r('app.media.btn_favorites_normal'),
  35.               count: this.articleItem.collectionCount,
  36.               textWidth: $r('app.float.star_icon_width')
  37.             })
  38.               .onClick(() => {
  39.                 this.onCollected?.()
  40.               })
  41.           } else {
  42.             // 设置点赞、收藏的lottie动画
  43.             ArticleCardButtonView({
  44.               clickAnimationPath: 'common/lottie/liked_lottie.json',
  45.               cancelAnimationPath: 'common/lottie/cancel_liked_lottie.json',
  46.               isClicked: this.isLiked,
  47.               count: this.articleItem.likesCount,
  48.               articleId: this.articleItem.id,
  49.               textWidth: $r('app.float.like_icon_width'),
  50.               type: 'like',
  51.               onClicked: this.onLiked,
  52.               normalImage: $r('app.media.btn_like_normal'),
  53.               onImage: $r('app.media.btn_like_on')
  54.             })
  55.             ArticleCardButtonView({
  56.               clickAnimationPath: 'common/lottie/collected_lottie.json',
  57.               cancelAnimationPath: 'common/lottie/cancel_collect_lottie.json',
  58.               isClicked: this.isCollected,
  59.               count: this.articleItem.collectionCount,
  60.               articleId: this.articleItem.id,
  61.               textWidth: $r('app.float.star_icon_width'),
  62.               type: 'collect',
  63.               onClicked: this.onCollected,
  64.               normalImage: $r('app.media.btn_collect_normal'),
  65.               onImage: $r('app.media.btn_collect_on')
  66.             })
  67.           }
  68.         }
  69.         .width(CommonConstants.FULL_PERCENT)
  70.         .justifyContent(FlexAlign.SpaceBetween)
  71.       }
  72.       .layoutWeight(1)
  73.       .height(CommonConstants.FULL_PERCENT)
  74.       .justifyContent(FlexAlign.SpaceAround)
  75.       ...
  76.     }
  77.     ...
  78.   }
  79. }
复制代码
功耗分析

同一界面下,在设置了省电模式和深色模式的前提下,测试主动减少应用亮度前后、去掉冗余动画前后的CPU模块、GPU模块、显示模块的耗电量和总耗电量。终极,使用IDE的Profiler工具检测得到的数据如下所示:
图9 主动低落应用亮度前后耗电量对比

图10 去掉冗余动画前后耗电量对比

从测试数据可以看出:
总结

针对”HMOS天下”的功耗优化这一场景,分别使用省电模式和深色模式对其优化,再增长其他可选的保举优化项,测试其在对应的GPU模块和显示模块的耗电量。测试表明,相比力正常模式,当开启省电模式和深色模式后,功耗降落明显,而针对应用需求,主动低落应用亮度、去掉冗余动画等方式后,功耗在对应模块连续降落。其各项对比指标数据如下所示:
性能指标开启省电模式开启深色模式主动低落应用亮度显示耗电量降落率13.2%21.9%15.4%总耗电量降落率12.0%12.5%12.4% GPU耗电量降落率总耗电量降落率去掉冗余动画17.7%3.3% 通过以上数据,可以清楚地看到接纳省电模式和深色模式可以有效地减少设备的能耗。

在应用开发中,开发者可以接纳一些技术手段来低落应用的功耗为用户提供更加节能高效的应用体验,满足用户对于续航能力的需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4