丧心病狂 or 形势所迫?谈谈安卓奇葩的链式启动

砍柴网  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

来源:太平洋电脑网

近日,一个 " 照明弹 " 功能在安卓圈子里掀起了狂风巨浪。MIUI 加入了 " 照明弹 " 功能,该功能可以把安卓 APP 在后台的一举一动暴露在用户面前,很多人惊讶地发现,为数不少的 APP 竟然会唤醒其他 APP!例如只要你开启微博 APP,就会唤起墨迹天气、百词斩、抖音、云闪付等 APP ——这,就是大名鼎鼎的 " 链式启动 "。

丧心病狂 or 形势所迫?谈谈安卓奇葩的链式启动

打开一个 APP 唤醒全村人,这就是令人头大的安卓 APP 链式启动

大家都知道安卓 APP 流氓,但如此的嚣张行为还是第一次明明白白地看清。为什么安卓 APP 会普遍存在奇葩的链式启动?这是国内 APP 独有的吗?这就来谈谈这个话题。

链式启动是刚需?

链式启动的现象在上面已经提到过了,毫无疑问,这会给用户体验带来很大的负面影响。在链式启动机制下,开启一个 APP 等于开启 N 个 APP,而这 N 个 APP 又会分别再开启 N 个 APP,简直是无限套娃,硬件再好的 手机 ,电量和性能也分分钟被榨得一滴都不剩。

为了对付链式启动,无论是 Google 官方安卓,还是各大手机厂商自己做的 ROM,都做了不少举措,例如国产 ROM 很早就开始限制 APP 相互唤醒,安卓新版限制了不规范 API 的调用令链式启动难以实施,这次 MIUI 的 " 照明弹 " 也是为限制链式启动所做的努力。

丧心病狂 or 形势所迫?谈谈安卓奇葩的链式启动

国产 ROM 很早就开始做链式启动的限制了

可见,链式启动其实非常不受用户欢迎,而且手机厂商也一直对其深恶痛绝——毕竟这会为手机带来卡顿、耗电的坏口碑。于是问题来了,为什么 APP 开发商会在产品中加入一个如此蛋疼的特性?这就得从安卓的推送机制说起了。

安卓 APP 想要向用户推送消息,有两种途径。

· 第一种是类似 iOS 的解决方案,Google 为安卓准备了基于 Google 服务的 GCM/FCM 推送服务,APP 不需要驻留后台,只需要接入到 GCM/FCM 中,APP 就可以借助 Google 服务器直接向安卓机推送消息。

丧心病狂 or 形势所迫?谈谈安卓奇葩的链式启动

是的,安卓也有系统级的云推送服务

· 第二种是 APP 自己驻留后台,连接自己的服务器实现消息推送。

按理来说,第一种方案更省电,而且实现难度更低,毕竟不用花额外精力去实现后台驻留——安卓会自动清理掉久不活跃的 APP 后台,要让 APP 进程驻留还是需要花点功夫的。

但偏偏,Google 服务在国内却难以正常使用,国行安卓很多都没有 Google 服务器框架,第一种方法直接就被抬出了场外。如果你有留意,可以发现某些国产 APP 的国际版和国内版本,使用的是不同的推送机制,例如 微信 在 Google Play 商店上的版本会使用 GCM/FCM 推送消息,而国内版则使用自己的后台进程推送,就是受此影响。

在国内无法使用 CGM/FCM 推送的前提下,APP 们不得不在后台驻留进程,保持和服务器的连接、及时接收推送。然而正如前文所说,这一做法也是需要花费更多精力的,而且还存在限制,而链式启动正是为了解决后台驻留、消息推送的诸多麻烦,而出现的解决方案。从这个层面来说,链式启动称得上是国内 APP 们的刚需。

链式启动是如何解决 APP 推送问题的?

那么链式启动是如何解决 APP 后台驻留和消息推送的问题的呢?我们先来说说 APP 在后台驻留进程会遇到的问题。

无论是原生安卓还是第三方定制 ROM,都对 APP 后台驻留问题采取了越来越严格的限制,一个 APP 想要单独靠自己驻留后台,变得越来越困难。过去 APP 所使用的透明悬浮窗、乱注册状态等手段,都不太好使,硬要驻留后台的话,分分钟就被系统揪出来在通知栏挂城墙。

APP 驻留后台很容易被系统挂城墙

此景此境下,APP 们只能抱团取暖了——既然单个 APP 很难停留在后台,那么 APP 之间相互唤起,那就容易多了!开启一个 APP 后,就拉起另一个抱团的 APP,那大家的进程都激活了,推送服务也就顺理成章。

但 APP 们是怎样抱团的呢?我们可以观察到,不少 APP 甚至会链式唤醒竞品 APP,这总不能是拉竞品 APP 一把吧,这从 商业 的逻辑来看似乎行不太通。其实,绝大部分的链式唤醒,都是由于 APP 们接入了同样的推送 SDK。

国内 APP 们想要实现推送功能,需要借助第三方的推送 SDK

APP 弄一套自己的推送机制太耗费精力,因此市面上出现了为各个 APP 解决推送问题的方案。例如开发者熟知的友盟、极光、个推等等,APP 一旦接入了这些推送 SDK,就会自带链式启动的特性。两个风马牛不相及的 APP 之所以相互唤醒,就是这个原因。

从体验方面来说,这些推送 SDK 的存在,有时候反而会提升用户体验。如果没有这些 SDK,每个 APP 都必须想办法让自己的进程一直驻留后台,几十上百个 APP 一顿操作,手机哪受得了这般的折腾,分分钟身体变得好热好奇怪;而有了推送 SDK 实现链式启动,很多 APP 可以不常驻后台,打开某个 APP 时,其他 APP 才纷纷被唤醒并推送消息,虽然体验还是不如 CGM/FCM 推送,也依然会压榨性能和电量,但总比大家都一直挤在后台好那么点。

除此以外,某些 APP 产品会有 DAU 日活量的考核,链式启动也可以帮助提高数据,因此这机制还是很受某些商业 APP 欢迎的。

链式启动是最终解决方案吗?

虽然链式启动很有效,但这也并非是长久之策。

· 链式启动依然会引发额外的性能消耗和发热,为了实现推送服务这有点得不偿失;

· 系统正对链式启动采取了越来越多的限制措施,例如安卓限制了第三方 SDK 的使用,不少 ROM 也可以切断链式启动的途径。

要怎么办?要彻底解决推送的问题,安卓 APP 还是得走由系统进行统一推送这条路。所幸的是,虽然 GCM/FCM 在国内无法使用,但目前国内已经出现了其他替代方案。

· MiPush。这是 MIUI 中系统级别的推送系统,只要 APP 接入了 MiPush,那么它就可以利用 MIUI 的云服务器来推送消息,而无需驻留后台。但只有在 MIUI 当中,它才能作为系统级别的推送机制存在,在其他 ROM 中则和其他第三方推送 SDK 类似。

MIUI 做了系统级别的消息推送服务

· 统一推送联盟。这是由工信部发起的项目,也是最有希望彻底解决国内 APP 驻留后台现象的方案。统一推送联盟得到了多家手机厂商的支持,华为、OPPO、vivo、小米、三星、魅族、nubia、百度、阿里巴巴、腾讯、京东、Google 等手机厂商、 互联网 企业都有参与其中。

没错,连 Google 也以观察员的身份加入了联盟,这安卓统一推送联盟官方背景十足。

有望彻底解决问题的统一推送联盟

得益于官方背书以及厂商们的积极参与,目前很多手机厂商如华为、OPPO、一加、小米、三星、中兴等等都完成了统一推送联盟的适配。

在未来,很有可能出现这样一种情况——国行安卓机的 ROM 中都内置统一推送的 API,安卓 APP 们都使用该接口来实现消息推送。这样一来,绝大多数的 APP 都没有了必须驻留后台的理由,链式启动走下历史舞台指日可待。

部分手机厂商已经完成了统一推送联盟的适配总结

简单来说,链式启动是当前安卓生态下,不得已而为之的推送机制导致的。这固然看起来丧心病狂,但主要还是因为形势所迫。国内无法使用 GCM/FCM,只有确立系统级别的统一推送标准后,才有可能杜绝链式启动。

而在此之前,把链式启动揪出来给你看,也只能让你更糟心,APP 们估计一时半会是不会改的了,希望统一推送联盟能够早日普及,为链式启动画上句号。

随意打赏

提交建议
微信扫一扫,分享给好友吧。