您的位置:首页 > 其它

应用应该尽可能省电——可持续发展的重要性

2013-04-29 18:20 274 查看
智能手机的续航能力一直是一个令用户头疼的问题。作为 android APP 的开发者,我们无法去纠正操作系统本身的设计缺陷,但是应尽可能让我们的 APP 本身不要做太多的无用功来浪费宝贵的电能。

1 监测电量和充电状态

如果你的 APP 在后台需要进行事务更新,那么更新的频率必须是一个值得慎重思考的问题,如果持续更新而不加限制,那无疑会加速电量消耗,而且也是不必要的。当你需要在后台线程进行这样的更新时,确保通过检测和检查电量和充电状态来控制更新的频率

l 通过当前的充电状态来控制更新频率:当你的手机连接到交流电源时最大化你的更新频率,如果连接到USB 或者正在放电时则更新的频率依次减少

l 时刻监控充电状态很重要,因为你的设备随时都有可能从插座中拔出或插入插座中。

l 通过当前的电量水平来控制更新频率:当你的电量水平小于某个阈值时降低你的后台更新速度

l 不要时刻监控电量水平,而只监控关键的电量值,因为电量水平持续变化,有可能监控电量水平的耗电程度反大于你的后台更新引起的耗电量。

监控电量水平和充电状态通过BatteryManager broadcasts 来实现,详细的用法请参考:
http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

2 监测底座状态和类型

底座(dock)大家平时应该用的少,但大概都见过,上图给个感性认识:



对于底座对后台更新频率的影响而言,大家基本上可以将其视为一个另类的充电器。我们可以通过BroadcastReceiver 的ACTION_DOCK_EVENT 事件来监控底座的连接状态和连接的底座类型。

3 监测网络连接状态

这一节是针对后台的网络数据下载和缓冲更新而言的(后文简称“网络更新”)。网上下载数据会大量耗电,这是众所周知的,因此根据网络连接状态和类型合理控制网络更新速率是非常必要的

l 连接可用时更新,反之停止更新。

l 在运营商移动网络环境下的网络更新速率应该小于 WIFI 环境下的更新速率。因为在移动网络环境下进行网络更新会消耗更多的资源,更容易耗电。

l 不应持续监控网络环境。因为网络环境很可能经常变化,因网络类型的反复切换而导致的网络更新反复调度将消耗更多资源。只在网络更新停止后进行监控是个好主意,并且每次更新前简单判断连接是否可用即可。请参考下节——按需启动Broadcast Receivers。

结合ConnectivityManager 和broadcast receivers 来检查并监控网络连接性和连接类型:
http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

4 按需启动 Broadcast Receivers

如上一节提到的,我们不应持续监控网络环境,因为那将导致做无用功,当你注意到你的 Broadcast Receivers 太忙于做不必要的监控的时候,就应该考虑让它们在运行时启动

正如上节所述,当我们进行网络更新之前即时判断网络是否可用,如不可用则停止更新,转而开启监控网络的Broadcast Receiver,一旦接收到网络可用事件,则关闭监控,同时开启网络更新。

通过PackageManager 可以在运行时开启或关闭你在 manifest 中定义的任何组件,包括 Broadcast Receivers,详细使用请参考:
http://developer.android.com/training/monitoring-device-state/manifest-receivers.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐