您的位置:首页 > 移动开发 > Android开发

Android性能优化之电量优化

2017-05-18 10:13 686 查看
耗电因素:

屏幕亮暗相关

设备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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  性能优化 android