太平洋电脑网丧心病狂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所使用的透明悬浮窗、乱注册状态等手段 , 都不太好使 , 硬要驻留后台的话 , 分分钟就被系统揪出来在通知栏挂城墙 。