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

Android 电量优化

2017-01-12 15:15 183 查看
GPS

应用中经常会用到定位服务,Android提供了NetWork定位和GPS,相对于来说,GPS会精确的多,对于一些诸如跑

步,导航类的应用基本会使用GPS定位,然而,GPS定位也会消耗大量的电量。

使用WakeLock或者JobSchedule唤醒设备处理定时的任务之后,一定要及时让设备回到初始状态。每次唤醒蜂窝

信息进行数据传递,都会消耗很多电量,它比WiFi等操作更加的耗电。
WakeLock and Battery Drain

假设你的手机里面装了大量的社交类应用,即使手机处于待机状态,也会经常被这些应用唤醒用来检查同步新的

数据信息。Android会不断关闭各种硬件来延长手机的待机时间,首先屏幕会逐渐变暗直至关闭,然后CPU进入休

眠,这一切操作都是为了节约宝贵的电量资源。但是即使在这种睡眠状态下,大多数应用还是会查实进行工作,

他们将不断的唤醒手机。一个最简单的唤醒手机的方法是使用PowerManager.WakeLock的API来保持CPU工作并防

止屏幕变暗关闭。这使得手机可以被唤醒,执行工作,然后回到睡眠状态。知道如何获取WakeLock是简单的,可

是及时释放WakeLock也是非常重要的,不恰当的使用WakeLock会导致严重错误。例如网络请求的数据返回时间不

确定,导致本来只需要1s的事情一直等待了1个小时,这样会使得电量白白浪费了。这也是为何使用带超时参数

的WakeLock.acquire()方法是很关键的。

但是仅仅设置超时并不足够解决问题,例如设置多长时间的超时比较合适?什么时候进行重试等等?解决上面的

问题,正确的方式可能是使用非精准定时器。同常情况下,我们会设定一个时间进行某个操作,但是动态修改这
个事件也许会更好。这正是JobSheduler API所做的事情。它会根据当前的情况与任务,组合出理想的唤醒时间,

例如等到正在充电或者连接到Wifi的时候,或者集中任务一起执行。我们可以通过这个API实现很多免费的调度算法。

NetWork and Battery Drain

通常情况下,电量的消耗有三种状态:

Full power:能量最高的状态,移动网络连接被激活,允许设备以最大的传输速率进行操作。

Low Power:一种中间状态,对电量的消耗差不多是Full power状态下的50%

Standby:最低的状态,没有数据连接需要传输,电量消耗最少。

总之,为了减少电量的消耗,在蜂窝移动网络下,最好做到批量执行网络请求,尽量避免频繁的间隔网络请求。

使用Job_Shedule,应用需要做的事情就是判断哪些任务是不紧急的,可以交给Job Schedule来处理,Job 

Scheduler集中处理收到的任务,选择合适的时间,合适的网络,再一起进行执行。

尽可能减少App的电量消耗的建议

优化网络请求

谨慎使用WakeLock

WakeLock 获取释放成对出现

使用超时WakeLock,以防异常导致没有释放

acquire(long timeout)

监听手机充电状态

BatteryManager会发送一个包含充电状态的持续广播,我们可以通过此广播获取充电状态和电量详情。

IntentFilter filter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);

Intent batteryStatus=context.registerReceiver(null,filter)
Doze和App Standby

Android 6.0提供了两个用来节省电量的技术Doze和App Standby

Doze

瞌睡,如果设备闲置一段较长事件,Doze技术将通过延迟后台网络活动,CPU运行等来减少电量损耗。

App Standby

应用待机。不是最近得到用户使使用的App,APP Standby将延缓这个应用的后台网络活动。

因为所有Android6.0即以上的设备上,Doze and App Standby都会运行。可能会影响你的App运行。
关于定位

locationManager.removeUpdates(locationListener)

减少更新频率
根据实际情况选择GPS或网络或两者,只使用一个会降低电量损耗。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: