跟上脚步,进入后台执行新时代

作者: Luiz Gustavo Martins, 合作伙伴开发技术推广工程师,合作伙伴 DevRel 团队

本文为 Android 电量管理 系列连载的第三篇,希望您能在阅读过程中收获设备续航方面的战略洞见和实践指导。

随着近几年来 Android 的不断发展,Google 逐步加强了对于后台执行的优化和限制。为了开发出现代化的 Android 应用,开发者需要学习如何通过最新方式来管理后台任务。

系统如何判定应用处于后台?

在理解后台执行这个概念之前,我们先来看看 Android 系统是如何定义前台应用的。当应用满足以下任意条件时,系统会判断应用处于前台:

如果以上条件均不满足,应用将被视为处于后台。

后台执行的相关行为变更

在后台运行应用会消耗设备的有限资源,如内存或者电池电量,进而影响用户的使用体验,比如说,后台任务可能会缩短设备的续航时间,或者在用户玩游戏、看视频或拍照时造成系统卡顿。

为了改善续航表现和用户体验,Android 在版本演进的过程中,针对后台执行进行了不同程度的限制,其中包括:

  • 低耗电模式和应用待机模式: 如果设备未插接电源,处于空闲状态一段时间且屏幕关闭,系统会进入低耗电或者待机模式,并对应用行为施加相应限制;
  • 后台位置限制: 对后台应用获取用户当前位置的频率进行限制;
  • 后台服务限制: 限制应用在后台运行服务,并禁止应用通过隐藏/不可见方式调用 CPU 或网络资源;
  • 近期新增特性及优化项: (1) 应用待机群组: 限制非活跃应用对设备资源的调用; (2) 后台限制: 当系统检测到应用出现不良行为时,系统会向用户询问是否要限制该应用在后台访问设备资源; (3) 省电助手功能优化

使用案例及解决方案

开发者在选择后台执行工具前,首先要对应用需求和限制场景有个清晰的了解,我们建议您参照以下流程图,为应用制定最佳的后台决策:

  • 作为 Android 推荐的后台管理工具,WorkManger 考虑了系统内的所有后台执行限制。如果您需要确保推迟的任务一定会被执行,请务必调用 WorkManager。该 API 允许您调度任务 (单次执行循环执行) ,组合任务和构成任务链。您还可以添加任务执行的约束条件,例如:当设备空闲或充电时才可以触发,或者当内容提供程序发生变更时才可以运行。

以上传日志为例,您需要依次创建以下两个工作请求,才可以将压缩后的日志文件上传至服务器:

  • 第一步:压缩文件。在此步骤中,您可以添加约束条件 “当设备充电时,任务才可以被执行”。
  • 第二步:向服务器上传文件。在创建此请求时,您应该添加 “需要联网”这一约束条件,指定任务仅在设备连接到有效网络时才会被触发。

将任务编入队列后,WorkManager 会在约束条件满足的情况下,即当应用可以访问所需资源时,才会执行这两个任务。

WorkManger 的另一个优势在于它可以与 Android 的电量管理特性协同工作。假设某个任务的指定执行时间恰好落在低耗电模式时段内,那么 WorkManager 便会在维护窗口时段 (如果此时约束条件已满足,或设备暂时退出了低耗电模式) ,尝试运行该任务。

  • 如果任务由外部事件触发且运行时间较长,例如同步新数据,请先使用 Firebase Cloud Messaging 通知您的应用,然后再调用 WorkManager 创建同步数据的工作请求。您可以阅读《使用 FCM 消息向用户发送通知》,获取更多详情。
  • 如果应用需要立刻执行一个由用户发起的任务,即使用户退出应用或关闭屏幕 (如音乐/视频重放或者导航) 也不会影响任务的执行,请您使用前台服务。(我们将在下一篇连载中深度剖析该使用案例,敬请期待!)
  • 如果您需要在某一特定时间运行一个无法被推迟的任务,且该任务会触发操作 (action) 并涉及用户交互,请调用 AlarmManager 中的 setExactAndAllowWhileIdle 方法。常见的定时任务包括:
    • 服药提醒
    • 电视节目开始前,向用户发送的提醒通知

在触发标准闹铃后,您会有几秒钟的时间完成工作,此时应用可能无法访问网络 (例如,系统处于低耗电模式,或者应用被归入某一待机群组)。如果您必须访问网络,或者任务执行时间较久,请调用 WorkManager。每当唤醒闹钟被触发后,设备就会退出低电量模式并持有一个局部唤醒锁,而长时间持有唤醒锁会严重影响设备的续航时间。建议您通过 Google Play 管理中心提供的 Android Vitals 来监测应用是否存在过度唤醒的问题。

总结:

合理的后台执行策略可以帮助您开发出卓越的应用,在打造完美用户体验的同时,为设备保驾 “续” 航。如果您想进一步了解后台执行的相关讯息,请访问 Android 开发者官网

请注意:WorkManager 目前只发布了公共预览版,您可以继续使用 JobScheduler 作为替代方案,不过和 WorkManger 相比,JobScheduler 有更多的局限。 JobScheduler 属于 Android 框架的一部分,它仅在 API ≥ 21 的系统上可用;而 WorkManager 则支持 API 14 及更高版本。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

五重备份无一有效,还有哪些 rm -rf 和GitLab类似的忧伤?

DBA的悲伤,不是没有做备份,就是没有做有效的备份。日光之下,并无鲜事。 都说一个没有删过数据库的DBA,职业生涯是不完整的,不过当你删过之后,你的DBA生涯可...

42850
来自专栏P2P传输

.torrent文件该如何理解?BT种子的技术原理是什么?

1、torrent文件的原理:如果这个问题是指torrent文件本身,那么,当你对一个文件(或者文件夹)制作成.torrent文件,实际上生成的.torre...

21900
来自专栏腾讯Bugly的专栏

微信文件微起底

微信大家都在用,但微信的本地文件到底隐藏着什么样的信息呢?我们怎么可以把长得都一样的微信,变的跟别人的不一样,来个专业定制 100 年呢?这个是一个让大家的微信...

31840
来自专栏全华班

分享一套OA协同办公系统

OA协同办公系统是高效工作流平台基础上,开发带有控制功能的OA办公系统、标准版功能模块:1、个人事务;2、工作流;3、行政;4、信息管理;5、人力资源;6、公文...

2K10
来自专栏逍遥剑客的游戏开发

UE4中集成Wiimote

299110
来自专栏musazhang的专栏

【 腾讯云的1001种玩法 】腾讯云数据库优化最佳实战:以 TXSQL 为例

TXSQL-Tencent MySQL 自从2016年5月份正式立项,在近一年的时间里对 MySQL 的读写性能、强同步、大并发量访问和稳定性等方面做了大量工作...

66330
来自专栏编程一生

架构必会的性能指标及分析策略

12620
来自专栏性能与架构

Mysql 双主与级联复制结合架构

在有些应用场景中,读写压力差别比较大,读压力特别大,一个Master可能需要上10台甚至更多的Slave才能支撑读的压力 这时候,Master就会比较吃力了,因...

38450
来自专栏编程软文

程序员常用软件,你用了哪些

29250
来自专栏架构师小秘圈

日订单50万级分布式事务

作者:伈情,喜玩Java、Python、Golang!热爱架构设计、SOA、微服务、高并发、分布式、性能优化、DevOps、大数据、消息队列等....!在互联网...

91380

扫码关注云+社区

领取腾讯云代金券