使用应用时,有时会出现掉电快、卡顿、过度发热等问题,影响用户体验的同时,也严重影响了应用使用时长和用户留存,如何解决上述问题?本文华为显示流程功耗优化专家王文华将分享议题——低功耗前台显示。

手机器件包括SOC、TP、Modem、GPS、Audio、Camer等主要器件,这些器件在使用时对功耗的影响比较大。

上图展示的是不同器件对手机功耗带来的影响,下文将通过从主流应用中发现的问题实例,对应用功耗产生影响的设计因素展开介绍。

视图设计

许多应用存在无效刷新、多元素同时刷新等问题,导致数据运算量增加,出现过度占用手机CPU、GPU资源的情况,引起应用耗电增加,部分应用还会出现卡顿现象。

建议:

1)尽量减小绘制窗体的面积。

2)减少多个元素同时刷新。

3)减少距离较远的元素同时刷新。

以上建议减少应用在刷新状态下的数据量,减少数据对带宽、CPU、GPU的占用,无形中节省了功耗,提升了应用性能。

图层优化

 

在全屏界面下,有些应用的界面图层非常多,究其原因是开发者没有将Activity销毁,导致图层合成的工作量很大,过度占用GPU资源,导致卡顿、显示效果差,同时功耗增大。

建议:图层数量控制在3个以下。

不需要GPU处理的组件减少耦合

有些视频类应用的视频流会采用SurfaceTexture或TextureView进行处理,常常出现GPU对界面重新绘制、重复工作的问题,部分场景可能存在时序变化,导致功耗增加,并发生卡顿。

建议:视频场景不要使用GPU重绘。

视频解码

应用有两种解码方式:硬解码和软解码。

软解码是纯粹依靠CPU来进行解码的一种方式,视频清晰度越高,CPU负载就越重,容易导致CPU能力不足出现卡顿,耗电量增加。

建议:使用硬解码,对于高清视频播放类应用的性能、功耗均有保障。

数据请求:

视频播放类应用在线播放需要提前预缓存视频资源,应用如果频繁发出网络请求,缓存过程的频繁交互就会导致对CPU等资源占用过度,耗电量增加。

建议:大数据块的集中下载既能满足用户体验又能有效降低WIFI功耗和负载,下载完成后可在间隔一段时间内保持Sleep状态。

布局与绝对坐标解耦

应用在不同分辨率的屏幕下显示时,如果使用绝对坐标会造成应用部分场景显示偏移,效果无法保障的问题。

建议:

1)应用布局时,在使用wrap_content、match_parent 和dp 单位为 XML 布局文件中的视图定义 android:layout_width 和 android:layout_height 时,可确保应用视图在当前设备屏幕上提供适当尺寸。

2)应用编码时请勿使用硬编码像素值,固定像素值将导致应用在不同密度的屏幕上出现布局错误。

3)建议应用不要使用AbsoluteLayout 布局,AbsoluteLayout 强制应用使用固定位置放置子视图,影响应用显示效果。

4)在使用尺寸和密度特定资源时,尽管系统会根据当前屏幕配置扩展布局,但在不同屏幕尺寸上,应用可能需要调整UI以及提供针对不同密度优化的可绘制对象。(指在资源目录中针对不同密度的资源进行定义)

关注安卓绿色联盟公号,回复关键词"2305"获取PPT文件。