本文翻译或摘取自google官方文档 Best Practices for Performance http://developer.android.com/intl/zh-cn/training/best-performance.html
优化电池使用时间
为了打造一个优秀的应用,您应设法降低应用对电池使用时间的影响。阅读完本教程后,您就可以让自己构建的应用根据其所在设备的状态来监控和调整自身的功能和行为。
要确保在不影响用户体验的情况下最大程度地降低应用对电池使用时间的影响,您可以采取一些措施,例如在网络连接断开时停用后台服务更新,或在电池电量较低时降低此类更新的频率。
确定和监控基座对接状态和类型
Android 设备支持几种不同类型的基座。这些类型包括车载或家用基座以及数字和模拟基座。许多基座可用于为插入的设备充电,因此基座状态通常与充电状态紧密相关。
您可以根据手机的基座状态调整更新频率,具体取决于相关应用。如果设备插入的是桌面基座,您就可以提高体育中心类应用的更新频率;如果设备插入的是车载基座,您就可以完全停用此类更新。相反,如果设备插入的是车载基座且后台服务正在更新路况,您就可以最大程度地提高更新频率。
系统是以持续 Intent
的形式广播基座状态的,这样您就可以查询设备是否插入了基座,如果已插入,您还可以查询基座类型。
确定当前的基座状态
基座状态详情是以附加信息的形式包含在 ACTION_DOCK_EVENT
操作的持续广播中的。由于这属于持续广播,因此您无需注册 BroadcastReceiver
。您可以将传入 null
的 registerReceiver()
作为广播接收器直接调用,具体如下一代码段所示。
IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT); Intent dockStatus = context.registerReceiver(null, ifilter);
您可以从 EXTRA_DOCK_STATE
附加信息中提取当前的基座对接状态:
int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1); boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
确定当前的基座类型
用户可以将设备插入以下四种类型的基座:
- 车载基座
- 桌面基座
- 低端(模拟)桌面基座
- 高端(数字)桌面基座
请注意,后两种类型仅适用于 API 级别为 11 及以上的 Android,因此如果您只关注基座类型,而不在意基座究竟是数字的还是模拟的,那么比较合适的做法就是查看全部三种类型:
boolean isCar = dockState == EXTRA_DOCK_STATE_CAR; boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK;
监控基座状态或类型的变化
无论设备是否插入了基座,系统都会广播 ACTION_DOCK_EVENT
操作。要监控设备基座状态的变化,您只需在应用清单中注册广播接收器即可,具体如以下代码段所示:
<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>
您可以使用上一步骤中所述的技术在接收器实施过程中提取基座的类型和状态。