Android性能优化之电量优化

来源:互联网 发布:手机禁止安装软件 编辑:程序博客网 时间:2024/05/22 13:29

耗电因素:
屏幕亮暗相关
设备awake,sleep的切换,尤其是唤醒.
CPU运行相关
网络
传感器
屏幕的渲染及CPU的运行是耗电的主要因素之一。所以其实当我们在做内存优化、渲染优化、计算优化的时候,就已然在做电量优化。
解决方案:
1监听手机是否处于充电的状态,有些业务可以选择在充电的时候进行,比如备份相册

// It is very easy to subscribe to changes to the battery state, but you can get the current// state by simply passing null in as your receiver.  Nifty, isn't that?IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);Intent batteryStatus = this.registerReceiver(null, filter);int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);boolean acCharge = (chargePlug == BatteryManager.BATTERY_PLUGGED_AC);if (acCharge) {    Log.v(LOG_TAG,“The phone is charging!”);}

2GPS
选择合适的Location Provide,例如你的App只是需要一个粗略的定位那么就不需要使用GPS进行定位,既耗费电量,定位的耗时也久。
Android系统支持多个Location Provider:

GPS_PROVIDER:

GPS定位,利用GPS芯片通过卫星获得自己的位置信息。定位精准度高,一般在10米左右,耗电量大;但是在室内,GPS定位基本没用。

NETWORK_PROVIDER:

网络定位,利用手机基站和WIFI节点的地址来大致定位位置,这种定位方式取决于服务器,即取决于将基站或WIF节点信息翻译成位置信息的服务器的能力。

PASSIVE_PROVIDER:

被动定位,就是用现成的,当其他应用使用定位更新了定位信息,系统会保存下来,该应用接收到消息后直接读取就可以了。比如如果系统中已经安装了百度地图,高德地图(室内可以实现精确定位),你只要使用它们定位过后,再使用这种方法在你的程序肯定是可以拿到比较精确的定位信息。
3及时注销定位监听
在获取到定位之后或者程序处于后台时,注销定位监听,此时监听GPS传感器相当于执行no-op(无操作指令),用户不会有感知但是却耗电。

public void onPause() {    super.onPause();    locationManager.removeListener(locationListener);}public void onResume(){    super.onResume();    locationManager.requestLocationUpdates(locationManager.getBestProvider(criteria, true),6000,100,locationListener);}

4多模块使用定位尽量复用

多个模块使用定位,尽量复用上一次的结果,而不是都重新走定位的过程,节省电量损耗;例如:在应用启动的时候获取一次定位,保存结果,之后再用到定位的地方都直接去取。
5传感器
在后台时注意及时注销传感器监听
使用传感器,选择合适的采样率,越高的采样率类型则越费电;

SENSOR_DELAY_NOMAL (200000微秒)SENSOR_DELAY_UI (60000微秒)SENSOR_DELAY_GAME (20000微秒)SENSOR_DELAY_FASTEST (0微秒)

http://huangjunbin.com/

http://www.kancloud.cn/kancloud/android-performance/53235

https://cn.udacity.com/course/android-performance–ud825/

http://hukai.me/android-performance-patterns/