登录 立即注册
安币:

查看: 975|回复: 6

Android P 后台应用保活、消息推送的噩梦【Bus Weekly】110 期

[复制链接]

116

主题

100

帖子

5874

安币

管理员

Rank: 9Rank: 9Rank: 9

发表于 2018-8-6 14:44:01 | 显示全部楼层 |阅读模式
1、前言
对于广大Android开发者来说,Android O(即Android 8.0)还没玩热,Andriod P(即Andriod 9.0)又要来了。
捕获.PNG
下图为谷歌官方公布的Android P的2018年发布路线图:
114443mcuh62v72eva6zcu.jpg

Android P的最后一个开发者预览版(即DP5)已如期发布于2018年7月26日,根据上面这张发布路线图,相信Android P的正式版将很快到来。对于Andriod开发者来说,不管Andriod P有多少新功能或者特性(反正“我”用iPhone啊,哈哈),是否影响“我”撸的APP的运行才是最要紧的事。

自从Andriod 6.0以来,Android系统在省电管理这方面做的越来越好,对于开发者来说限制也越来越多,也直接导致了各种保活黑科技群魔乱舞(别笑,就的就是“你”!)。但Android P官方公开的开发者资料来看,此版加入或强化的多项设备电量管理新特性,使得需要后台消息推送、应用保活的APP变的越来越困难,黑科技恐将成为历史。


2、原先的APP为什么要搞各种保活黑科技?
其实搞保活的目的倒不是为了干什么见不得人的坏事(但不排除动机不纯的开发者),主要是像IM即时通讯应用和资讯类应用等需要搞后台消息推送、运动类应用需要在后台实时监测用户的运动数据等,因为现在越来越多的手机厂商为了省电策略考虑,基本上如果你的应用没有被加入白名单,一旦处于后台就会被系统限制甚至干掉,但使用APP的用户才不听你这些解释——反正“我”就要你的APP能如期正常运行,开发者也是不得已而为之。

以消息推送为例,当APP处于后台或关闭时,消息推送对于某些应用来说非常有用,比如:

  • 1)IM即时通讯聊天应用:聊天消息通知、音视频聊天呼叫等,典型代表有:微信、QQ、易信、米聊、钉钉、Whatsup、Line;
  • 2)新闻资讯应用:最新资讯通知等,典型代码有:网易新闻客户端、腾讯新闻客户端;
  • 3)SNS社交应用:转发/关注/赞等通知,典型代表有:微博、知乎;
  • 4)邮箱客户端:新邮件通知等,典型代表有:QQ邮箱客户端、Foxmail客户端、网易邮箱大师;
  • 5)金融支付应用:收款通知、转账通知等,典型代表有:支付宝、各大银行的手机银行等;
  •   .... ....

在上述的各种应用中,尤其对于用户接触最多、最平常的IM聊天应用或新闻资讯来说,保活和消息推送简直事关APP的“生死”,消息推送这种能力已经被越来越多的APP作为基础能力之一,因为移动互联网时代下,用户的“全时在线”能力非常诱人和强大,能随时随地即时地将各种重要信息推送给用户,无疑是非常有意义的。

题外话:实际上,对于后台消息推送能力,Android原版系统早就内置了系统级推送服务,它就是GCM服务(现在升级为FCM了),但众所周之的原因,谷哥的服务在国内都是用不了的(你懂的)——无奈啊!

3、针对以往Android版本的各种保活技术回顾
搞Android端IM和消息推送服务的开发者都知道,Android P之前为了搞定客户的投诉:“为什么微信能收到消息而你们的IM却不能?”,为了解决这个“痛点”,广大的Android开发者们只能让各种黑科技轮番上场、各显神通,最典型的:比如曾今在手机QQ上的1像素保活(虽然QQ官方从没正面承认过)、后台无限播放无声音的音频、应用互相拉活等,大家都耳熟能详。

4、国内各种Android厂商级推送通道出现了
为了响应Android原版中对省电策略、用户体验等设计,也为了避免各种保活乱象,国内主流的Android手机厂商在阉割了谷歌原版的GCM(FCM)推送通道之后(悲剧!),依靠自身的技术力量构建起来各家自有的推送通道。

下面是国内主流Android厂商的推送服务开发者入口:

看到上面这串厂商系统级推送通道列表,相信你已经露出了你那排洁白的牙齿了 ^_^。。。

如果剧情都能像都市爱情小说那样——“男女主角从此过上了幸福美满的生活...”,那就完美了!

但是(这个但是真的很讨厌),不要高兴的太早,理想情况下对接厂商通道确实很爽,但现实很骨感。

对接厂商通道带来的麻烦,远比你想像的要多:

  • 1)你得一家一家下载SDK、注册开发者账号、搞手机端对接、搞服务端对接;
  • 2)各厂商的SDK都打包在一个APP里,可能存在各种兼容性问题;
  • 3)因为ROOM版本问题,即使同一个厂商的手机的同一套SDK也存在新旧ROOM的兼容性问题;
  • 4)这一堆的SDK,各种jar包让你的APP莫名变大了不少;
  • 5)服务端要对接各种厂商的推送后台,各家的技术水平、SDK水准、服务稳定性参差不齐,对接起来难受吧;
  • 6)有些手机小厂并没有自已的推送通道,你自建的推送能道还不能扔。

凡此种种,对接厂商通道并不轻松

而且,你忘了国内的Android机型有多杂吗?看下面这张图:
162048vzpzhgiw1jgwg41f.jpg

不过:如果公司不排斥使用第3方通送方案的话,现阶段这种混乱状况下,可以考虑直接用第3方的服务,比腾讯的信鸽推送为例(首先申明,我没收信鸽的好处费,只是举个例子!),信鸽推送的方案也是一家一家对接第3方的厂商通道道+自有通道,对于开发者来说信鸽的实现思路其实跟我们想的是一样的。但好处是:别人有专门的团队死磕这件破事,比你自已一个人带来的效果要好多了。

5、万众瞩目的“统一推送联盟”上场了
130354jy23fnngth2grf6q.jpg

为了解决这些乱象,好消息是去年有政府背景的“统一推送联盟”成立了,广大Android开发者真是翘首以盼。

但坏消息是好像进展并不顺利(大家心知肚明啊,各厂商的利益不好均衡嘛),虽然进展不大,但总算还是有希望,Android同行们再等等,总有Android端消息推送一统江湖的方案出现的那天。

6、Andriod P要来了,噩梦仍将继续!
Android P中针对省是管理方面的改进,只会使得搞后台保活、消息推送越来越麻烦,作为Android开发者来说,了解这些新特性至少能让自已心里有底,从而在技术上做到有的放矢。

Android P中电量管理特性主要体现在以下四个方面:

  • 1)应用待机分组:Android P 新增应用待机分组功能,让系统根据用户的使用情况而限制应用调用 CPU 或网络等设备资源;
  • 2)应用后台限制:Android P新增后台限制功能,若应用出现 Android Vitals 内所描述的不良行为,系统将提醒用户限制该应用访问设备资源;
  • 3)省电模式优化:Android P 优化了现有的省电助手功能,在启用该功能后,系统将对所有应用的后台运行实施加以限制;
  • 4)低耗电模式:当用户一段时间没有使用设备时,设备将进入低耗电模式,所有应用都将受到影响。 Android P 并未针对低电耗模式作出任何更改。

注意:不论应用程序的 target SDK 是否为 Android P ,所有应用都受限于以上行为变更。

接下来将逐一介绍这几个特性。


7、Andriod P电量管理特性1:应用待机分组
应用待机分组是 Android P 新添加的一项电量管理功能,它能根据应用的使用频率或者最近一次使用时间,对其资源请求进行优先级排序。应用待机分组一共有五个分组,系统会根据每个应用的使用情况,将其划分至五个优先分组中的一个,而每个分组对设备资源的调度各有不同的限制。

7.1优先分组
系统将动态分配各个应用至不同分组,并根据需求重新分配所在分组。系统或会通过利用机器学习预加载的应用,从而预测各个应用的使用概率,然后将它们编配至相应的群组中。若设备中没有安装此类系统应用,在默认情况下,系统会根据应用的近期使用情况进行等级划分。应用活跃度越高,所处分组的优先级就越高,也就相应地更容易获取设备资源。尤其是,应用所处的的群组决定了其所安排的任务 (job),触发标准闹铃以及接受高优先级Firebase Cloud Messagesing信息的频率。这些限制仅在非充电状态下才有效;当设备充电时,应用并不会受到系统限制。

*注意:设备厂商可以自行规定非活跃应用的群组划分规则。请开发者不要试图篡改应用所处的群组,而是专注于改善应用行为,确保应用被划分至目标群组后,依旧能够顺利运行。您可以调用 UsageStatsManager.getAppStandbyBucket(),查看应用当下所处群组。

应用待机模式下共有以下五类群组:

  • 1)活跃 (Active): 应用正在被使用;
  • 2)工作 (Working set): 应用使用频率很高;
  • 3)常用 (Frequent): 应用经常但不是每天被使用;
  • 4)极少 (Rare): 应用偶尔被使用;
  • 5)应用偶尔被使用 (App is not frequently used)。

此外,安装后一次都未被使用过的应用将被划分至 “从不” 这一特殊群组,并受到十分严格的系统限制。

注意:应用待机群组限制不适用于低耗电模式白名单中的应用。

7.2活跃 (Active)
活跃应用指用户正在使用的应用,例如:

  • 1)应用启动了一个Activity;
  • 2)应用正在运行前台服务;
  • 3)另一个前台应用已关联至该应用 (通过同步适配器与前台应用的内容提供器相关联);
  • 4)用户点击了应用的推送。

在任务、标准闹铃以及FCM信息的资源调用上,活跃群组应用免受任何系统限制。

7.3工作 (Working set)
若应用的运行频率很高,但目前并未处于“活跃”状态,它就会被划分至工作群组,例如用户常用的社交媒体应用。此外,该群组还包括了那些被间接使用的应用。

工作分组内的应用会在任务 (job) 运行和闹铃触发方面受到部分系统限制。

7.4常用 (Frequent)
常用应用指用户经常使用但不是每天使用的应用,比如用户在健身房使用的打卡应用可能就属于这一群组。

系统对常用分组采用的限制更强,应用运行任务(job)和触发闹铃的能力都会受到影响,而且接受的高优先性FCM消息也有数量上限。

7.5极少 (Rare)
若应用的使用频率很低,它就会被划分至该分组,酒店应用就是一个很好的例子——用户只有在下榻这个酒店的时候才会打开此应用。

该群组下的应用在任务 (job)、闹铃和高优先性FCM消息的资源调用上都会受到严格的限制。此外,网络访问能力也会受到影响。

7.6最佳实践建议
如果您已经根据低耗电模式和应用待机模式的最佳实践对您的应用进行过相关优化,您应该能够轻松应对新的电量管理特性。不过,部分应用行为可能会受到此次特性变更的影响,无法继续正常运作。

  • 1)请勿尝试操控系统将您的应用分配至某一特定群组。系统的分组规则可能会发生变化,而且设备厂商也可以根据自己的算法自行开发分组应用。开发者需要确保自己的应用在任何群组内都能够继续流畅运行。
  • 2)如果应用没有 Launcher Activity,它可能永远都不会切换至活跃分组。开发者可能需要重新设计应用并添加此类activity。
  • 3)如果应用的推送不具备可操作性,用户将无法借助与推送的交互将应用切换至活跃群组。在这种情况下,开发者可考虑重新设计推送功能,允许用户响应。具体操作指南,请参照 Material Design 中有关推送设计的章节。
  • 4)若应用在接受高优先级的 FCM 消息之后未能发送推送,用户将无法与应用产生互动并将其优先级提升至 “活跃” 等级。其实,高优先级 FCM 消息的唯一用途就是向用户发送推送,因此这种情况绝对不应该出现。如果您错误的将没有与用户进行互动的 FCM 消息设置为高优先级,这种标记不当的行为可能会导致其他不良后果,比如:在应用耗尽高优先级消息额度之后,系统会把真正紧急的 FCM 消息当做“普通优先级”消息来处理。

注意:如果用户多次忽略某条推送,系统会询问用户是否不再接受此推送。请开发者不要只是为了将应用保留在活跃群组,而向用户不断发送推送。如果一个应用下面有多个包,这些包可能分别属于不同分组,各自的访问权限也有所不同。在测试环节时,请开发者先将包划分至不同分组,然后进行多次测试,确保应用行为无异常。

8、Andriod P电量管理特性2:后台限制
当系统监测到应用消耗过多资源时,系统会通知并询问用户是否需要限制该应用的后台活动。

目前有以下两种情况会触发系统发送此通知:

  • 1)频繁使用唤醒锁 (wake locks):屏幕关闭后,局部唤醒锁 (Partial wake lock) 连续开启 1 小时;
  • 2)过多的后台服务:当应用目标 API 等级低于 26,且运行过多后台服务。

设备厂商可自行决定具体采用的限制,比如:在 AOSP 构建上,除非受限应用运行在前台,否则它将无法运行任务 (job),触发闹铃或者访问网络。

9、Andriod P电量管理特性3:省电助手优化
Android P 进一步提升了省电模式的性能,由设备厂商来决定其采用的具体限制。

比如:在AOSP构建上存在以下系统限制:

  • 1)应用将更容易进入待机模式,系统不会一直等到应用处于“空闲”状态才采取行行动;
  • 2)不论目标API等级为何,所有应用都会受到后台执行限制;
  • 3)屏幕关闭后,位置服务可能被禁用;
  • 4)处于后台的应用不能访问网络。

除此以外,Android P 还引入了多项针对设备的电量管理的优化。

建议开发者在开启省电模式的情况下测试应用,您可在 Settings > Battery Saver 内手动开启省电模式:
123.jpg

11、本文小结
对于开发者来说,Android平台向来以“乱”著称,后台保活和消息推送从各种黑科技,到厂商纷纷自建通道,再到统一推送联盟。时至今日,该面对的问题依然没有改观,随着Android P正式版的发布,对于IM、消息推送服务等开发者来说,个人英雄主义式的技术黑科技越来越没有发挥的空间,从长远来讲这是好事。

随着时间的推进,分久必合的局面终将出现,Android平台也必将越来越规范,Android P这样版本只是这前进过程中的阵痛,希望广大Android开发者在Android技术进步的福利下能越来越轻松,再也不用“开大招”琢磨各种非主流黑科技了。走经路,做正经APP才有未来。。。

来源:移动端IM技术分享



【Bus Weekly】110 期

【一周优秀博文】

Android你不知道的 WebView 使用漏洞

Android插件化之动态加载APK实现

Android实现Rxjava2+Retrofit完美封装

开源一个功能强大的Android自定义图表库




【一周Android精品源码推荐】

android 3D立体无限旋转容器源码

Android自定义图标库,使用方便,扩展性强

一款高仿腾讯漫画的漫画阅读类APP

android领取淘宝商品优惠券的APP源码

仿支付宝记账本功能,饼状图;数字键盘

android一款功能完善的电子书应用源码

基于react-native实现的客户端高仿one一个

android banner界面效果源码



121136jum5k4yy5k252zzk.jpg
安卓巴士官方微博链接

Bus Weekly回顾
安卓巴士菁英会会员招募中~
121136fmnx5mmmn1hf1mmw.jpg

2

主题

9410

帖子

2101

安币

Android大神

Rank: 6Rank: 6

QQ达人

发表于 2018-8-6 14:45:41 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

475

主题

928

帖子

5809

安币

手工艺人

发表于 2018-8-6 14:47:54 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

451

主题

959

帖子

1975

安币

手工艺人

发表于 2018-8-6 14:54:55 | 显示全部楼层
楼主是好人,回个帖会有安币吗?

17

主题

9061

帖子

2351

安币

Android大神

Rank: 6Rank: 6

发表于 2018-8-6 14:59:27 | 显示全部楼层
感谢大神~

0

主题

8987

帖子

2393

安币

Android大神

Rank: 6Rank: 6

发表于 2018-8-6 15:17:30 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol

1

主题

9008

帖子

2924

安币

Android大神

Rank: 6Rank: 6

发表于 2018-8-6 15:17:40 | 显示全部楼层
支持,感谢,祝巴士越来越好~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表