app开发过程中有关耗电注意事项

来源:互联网 发布:网络搬砖项目 编辑:程序博客网 时间:2024/05/16 23:01
一、保持屏幕常亮
原则:有唤起屏幕常亮的代码必须有移除屏幕常亮的代码。

原因:有保持屏幕常亮的代码,cpu一直在运行。

1、增加flag

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //唤醒
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //移除

2、PowerManager.WakeLock
 

3、控件属性 作用在控件的生命周期内

android:keepScreenOn="true"

二、service 服务
普通服务一旦启动之后,就会一直处于运行状态,必须调用stopService()或者stopSelf()方法才能让服务停止下来。Android专门提供了一个IntentService类,IntentService在运行完毕后自动停止,减少耗电量。
三、UI层级
原则:UI层级越深,越耗电
原因:层级越深,cpu和Gpu的绘制越耗费时间,越耗电。
代码:include、merge、viewStub

四、Alarm机制和Timer

Alarm往往用在执行定时任务,因此具有唤醒cpu的功能。可根据需求,最大程度的降低cpu的唤醒频率。

Timer也可以执行定时任务,但是当手机进入休眠状态时,timer会失效,但是也要在代码中注意Timer的注入和移除。

五、View 设置透明度

mImageView.setAlpha()

原则:尽量少用,尽量减小作用域 原因:会调用底层的cpu和Gpu进行重绘,以致耗费电量。
六、利用JobScheduler API

过去,如果开发人员想通过后台调取服务器数据,或完成某些处理工作,应用程序必须先监听是否有事件正在发生,并为自己设定一个唤醒时间,一旦应用程序开始运行,他需要检查各种环境条件,以确定是否具备条件让它完成工作,还是需要稍后再试,这种方式不仅复杂,而且容易出错,它会不断的浪费资源,比如当 一个应用程序被唤醒后,发现条件不符合就只能去睡觉并为下次唤醒再次设定时间,这是一个反复的过程。 这个问题,将引用JobScheduler来修复,它作为一个调度应用程序,负责当应用程序被唤醒时,提供适当的运行环境,所以开发者不用再让程序检测环境是否符合需求,开发人员只需要按照标准的流程来,调度程序会自动为唤醒的程序,准备好运行环境。 JobScheduler的优势相当巨大,它不仅可以帮助手机节省电量, 实际由于不在需要监听,更改和设置报警,还可以帮助开发人员减少代码书写量。目前该JobScheduler类,已经加入Android L开发者预览版。
七、网络请求

WiFi网络请求会比移动网络请求下省电。在蜂窝移动网络下,最好做到批量执行网络请求,尽量避免频繁的间隔网络请求。
八、工具

Battery Historian 是android5.0开始引入的新的api。通过下面的指令可以得到设备上的电量消耗信息。
mImageView.setAlpha()
//得到整个设备的电量消耗信息
adb shell dumpsys batterstats > xxx.txt
// 得到指定app相关的电量消耗信息
adb shell dumpsys batterystats > com.package.name > xxx.txt

得到了原始的电量消耗数据之后,我们需要通过google编写的一个python脚本把数据信息转换成可读性更好的html文件。
python historian.py xxx.txt > xxx.html


原创粉丝点击