开发人员可以使用API来选择启动后台服务时应该满足的条件

导读 谷歌已经制定了一项重大计划,以进一步提高安卓设备的电池寿命。在谷歌I O期间的一次演讲中(你可以在下面观看),该公司与开发者分享了其当

谷歌已经制定了一项重大计划,以进一步提高安卓设备的电池寿命。在谷歌I/O期间的一次演讲中(你可以在下面观看),该公司与开发者分享了其当前和未来优化电池寿命的计划。谷歌计划杀死未绑定的后台接收者,并将迫使开发者合并他们的后台服务。唯一的问题是我们不知道这些新要求什么时候生效。不过,从谷歌到目前为止分享的细节来看,可以说这些变化将大大延长电池寿命,因为我们终于采取了严厉的措施来应对唤醒锁。

电池寿命的现状

对于日常用户来说,管理电池寿命可能是一项非常复杂的任务,因为我们已经安装了许多应用程序。然而,对于谷歌来说,他们不在乎你安装了多少应用程序,也不在乎如何使用它们。他们关注的是宏观层面的电池寿命管理,这意味着只需要考虑三个主要的电池寿命消耗来源:CPU、收音机和屏幕。

因为屏幕的原因,谷歌几乎无法控制功耗。因此,由于后台同步,他们将全部精力集中在控制唤醒锁和网络活动上。谷歌希望确保你安装的应用程序不会在你不知情或不同意的情况下破坏电池寿命。一项又一项的调查显示,人们想要更长的电池寿命。那么他们是如何解决这些问题的呢?

谷歌的方法可以概括为三个字:减少、推迟和概念。尽量减少后台活动,将后台活动推迟到更合适的时间,然后将后台活动与其他作业结合起来,以减少CPU开销。在安卓6.0棉花糖中,谷歌推出了两个旨在节省电池寿命的新功能:播放ze模式和App待机。此外,谷歌希望开发者继续向使用其JobScheduler API迁移,并让谷歌决定何时启动后台服务。

JobScheduler API实际上是从Android棒棒糖中存在的,它是为那些想要推迟后台服务直到系统准备好运行这个操作的开发人员准备的。开发人员可以使用API来选择启动后台服务时应该满足的条件。例如,开发人员可以安排他们的服务在设备充电时、网络类型改变时或在特定时间范围内(例如,“未来4-6小时内的某个时间”)运行。然后,作业调度器使用这些条件来选择时间,以便它可以将作业与其他未完成的后台活动合并。这样可以有效利用CPU周期和网络流量,降低电台和CPU的功耗。

接下来是应用待机。这个功能是在安卓棉花糖中引入的,经常被误解或与Doze混淆。然而,应用待机实际上是完全不同的。它的目的是跟踪不活动的应用程序(没有任何前台服务/通知并且一段时间没有打开的应用程序)。非活动应用程序将无法访问网络,它们的同步将被推迟到设备通电后。高优先级的云消息仍然可以唤醒不活动的应用程序,但是除非您再次显式打开应用程序,否则不要做任何事情。这就是谷歌如何阻止那些很少使用但却是必要的应用程序执行任何操作,直到你需要真正使用该应用程序。

最后是泽模式。原本被称为安卓续航救星,其实很多用户对它的实现都很失望。虽然谷歌声称由于ze模式,电池续航时间得到了显著提升(根据谷歌设备上的评论,他们声称屏幕关闭时,电池续航时间可以提高30%),但实际上,棉花糖中实现的ze模式使其不适合大多数用户。

让我们回顾一下安卓棉花糖中的ze模式是如何工作的。屏幕关闭后,设备将耗尽电池电量,设备已经静止一段时间,设备将进入ze模式。当设备进入ze模式时,所有在电池优化设置中未被用户列入白名单的应用程序都会延迟以下操作:网络访问、唤醒锁定、标准AlarmManager报警(不要与旨在唤醒您的实际报警混淆)、WiFi扫描或同步适配器。这些操作将被延迟到下一个维护窗口,从而系统唤醒设备并允许所有这些操作在短时间内同时运行(即合并它们)。

这是一个合理的提高电池寿命的理论,但问题在于它的实现。播放ze模式需要设备有重要的运动传感器,因为它使用传感器来实际检测设备是否处于静止状态。默认情况下,安卓会在屏幕关闭后等待30分钟,以翻转重要的运动传感器并确定手机是否静止。传感器激活4分钟,并检测到设备上的任何移动,无论是行走、跑步、骑自行车等。此外,该设备试图将设备的位置拉到20米以内的精度。如果设备被认为是静止的,它将在10分钟后再次检查设备。如果设备在3次额外检查后(即30分钟后)仍处于静止状态,则设备只有在此之后才会真正进入ze模式。然后,在安卓为应用提供5分钟的宽限期后,安卓通知应用设备即将进入ze模式,设备将进入空闲状态并停留60分钟,直到第一个维护窗口出现。这种空闲维护循环一直持续到重要的运动检测器或位置服务检测到设备已经移动。