一、国内安卓机
举一个例子,比如我们常用的微信这个APP,首先你打开微信登录账号后,你手机上的微信APP就会和腾讯的服务器保持一个长久的连接,你发一条消息给你朋友,这条消息不是直接从你的手机上发到他的手机上的,而是你的手机将消息发给了腾讯的服务器,然后腾讯的服务器再发给你朋友。这个时候就有一个问题,如果你朋友手机上的微信APP处在关闭状态下,那么即使腾讯服务器把消息发过去了,他也收不到,因为他的手机上微信APP已经完全关闭了,已经和腾讯服务器断开连接了,只有当他再次打开微信的时候,连接恢复,他才能收到那条信息。也就是说,想要及时收到消息,那么微信这个APP就不能完全关闭,需要留下一些线程在后台一直保持运行,一直和腾讯的服务器保持接连,这样一旦收到消息,系统才能及时启动消息机制提醒你。
二、ios
苹果有自己的服务器(谷歌实际上也有自己的服务器,但国内不能用,下面会说),ios的这个系统,必须搭配苹果公司的服务器才能正常运行。每一台ios设备在联网的时候,,ios系统首先会和苹果的服务器建立一个长连接。
还是微信那个例子,在ios上,如果微信处在打开状态下,那么逻辑还是和上述安卓的一样,差距是体现在关闭微信后。如果你iPhone上的微信APP关闭了,会和腾讯的服务器断开,而这个时候,你朋友发了一条消息给你,这条消息先发给了腾讯的服务器,这时腾讯服务器发现你手机上的微信APP没有和服务器建立连接,那么它会将这条消息转头发给苹果的服务器,然后苹果的服务器收到后会发送给你的ios系统,系统收到就能及时做出提醒。这样实际上是多了一个步骤,但带来的好处是你手机上的微信APP可以完全关闭,不需要留下多余的线程来接收消息,因为苹果的服务器会一直保持接收消息,然后将消息发给手机系统,系统再做出提醒。
ios系统实际上不支持真正意义上的后台运行(仅支持后台听歌、下载、导航等有限几个操作,如果一个APP进入后台,10分钟内没被换到前台来,那么系统就会将它关闭,只留下临死前的一个截图,所谓的墓碑机制)。
三、海外版安卓机
海外版安卓机可以使用谷歌的服务器(前段时间闹的沸沸扬扬的安卓停止对华为授权事件,实际上就是谷歌不让海外版华为连接谷歌的服务器了),而使用了谷歌的服务器,推送机制就变得和ios一样了,就不需要有APP自己的线程留在后台了,谷歌的服务器会帮APP们接收信息。
而由于众所周知的原因,国内安卓用户是无法连接谷歌的服务器的。
题外:
目前,国内的APP驻留后台已经把国内的整个安卓生态搞的乌烟瘴气、乱七八糟。其实好多大厂想过解决方案,比如小米推出自己的推送服务,华为也有自己的推送服务,但全都收效甚微。因为没什么开发者去配合他们,一来因为开发者适配的话需要一个厂一个厂去适配,提升了开发成本和维护成本,二来APP开发商也不愿放弃常驻后台带来的利益。
目前比较值得期待的,是安卓推送联盟,这个联盟是由工信部牵头的,运行机制和ios的推送原理差不多,如果能全面铺开,可以解决上述问题,但这一套现在还在测试阶段,还是个美好的愿望,日后能不能全面铺开还是前途未卜。
文章评论