25

iPhone 为什么不加大内存?

 4 years ago
source link: https://www.tuicool.com/articles/MzaqM3y
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

VzIfMjj.jpg!web

Photo by Bagus Hernawan on Unsplash,作者: 余以为 ,来源:知乎

这实际上是一个技术问题,涉及到iOS与安卓两个操作系统的设计原理。

首先,安卓机上大内存,这是个中国特色,也就是说只有中国国内销售的安卓机才会上这么大的内存,海外版的安卓机主流内存基本和苹果差不了太多。图我就不贴了,大家可以自己去查一下,华为的P30,海外版的128G硬盘的型号只配4G或6G内存,而中国版的P30,64G硬盘的型号却配上了8G内存;海外版的安卓机,128G硬盘配4G内存比比皆是,简直不要太多,但在国内,你几乎找不到一款128G硬盘配4G内存的安卓机。这样乍一看好像我们得了便宜,可其实,这是国产安卓生态的无奈之举。

先说国内安卓机为什么上大内存吧。举一个例子,比如我们常用的微信这个APP,首先你打开微信登录账号后,你手机上的微信APP就会和腾讯的服务器保持一个长久的连接,你发一条消息给你朋友,这条消息不是直接从你的手机上发到他的手机上的,而是你的手机将消息发给了腾讯的服务器,然后腾讯的服务器再发给你朋友。

这个时候就有一个问题,如果你朋友手机上的微信APP处在关闭状态下,那么即使腾讯服务器把消息发过去了,他也收不到,因为他的手机上微信APP已经完全关闭了,已经和腾讯服务器断开连接了,只有当他再次打开微信的时候,连接恢复,他才能收到那条信息。也就是说,想要及时收到消息,那么微信这个APP就不能完全关闭,需要留下一些线程在后台一直保持运行,一直和腾讯的服务器保持接连,这样一旦收到消息,系统才能及时启动消息机制提醒你。

所以,国内安卓系统下,每一个APP,都必须在后台 (也就是内存里) 留下一些线程随时准备接收外来信息,也就是说你刚打开手机还啥都没干,你手机上所有APP的一部分线程已经悄悄启动,进驻内存,而这些后台启动的线程是无法关闭的,因为是合法的,关闭的话用户就无法及时收到消息。

另外,不要小看这些后台线程的数量,一个APP在后台里留十几二十MB确实不多,但100个APP (64G硬盘的手机就能装100个APP) 加起来就要吃掉将近2G的内存!

因此,国内安卓机的内存容量必须跟着硬盘容量递增,硬盘容量越大,能下的APP就越多,就越需要更大的内存来保证这些APP留在后台的线程正常运行。

再说iOS,它为啥就不需要大内存呢?因为苹果有自己的服务器。iOS的这个系统,必须搭配苹果公司的服务器才能正常运行。每一台iOS设备在联网的时候,iOS系统首先会和苹果的服务器建立一个长连接。

还是微信那个例子,在iOS上,如果微信处在打开状态下,那么逻辑还是和上述安卓的一样,差距是体现在关闭微信后。如果你iPhone上的微信APP关闭了,会和腾讯的服务器断开,而这个时候,你朋友发了一条消息给你,这条消息先发给了腾讯的服务器,这时腾讯服务器发现你手机上的微信APP没有和服务器建立连接,那么它会将这条消息转头发给苹果的服务器,然后苹果的服务器收到后会发送给你的iOS系统,系统收到就能及时做出提醒。

这样实际上是多了一个步骤,但带来的好处是你手机上的微信APP可以完全关闭,不需要留下多余的线程来接收消息,因为苹果的服务器会一直保持接收消息,然后将消息发给手机系统,系统再做出提醒。

这样一来,苹果手机的内存就不需要跟着硬盘容量一起递增,因为即使APP完全关闭,也不影响及时接收消息。再加上iOS系统实际上不支持真正意义上的后台运行 (仅持后台听歌、下载、导航等有限几个操作,如果一个APP进入后台,10分钟内没被换到前台来,那么系统就会将它关闭,只留下临死前的一个截图,所谓的墓碑机制) ,所以苹果手机的这些内存绝大部分时间内其实只为一个APP (当前这个) 服务,一个APP使用4G内存,真的是绰绰有余,有余到多的不能再多了。

插个题外话,都说苹果手机安全,注重隐私,也有这个原因,苹果手机上的APP,如果关闭了,那就是真的全部线程都关闭了;而安卓,由于每一个APP都必须在后台留一些线程一直运行,有的无良APP甚至手机厂商,就不仅仅会留下接收消息的线程,还会留下偷偷开启摄像头或者麦克风的线程,去收集用户数据,而这些后台的的线程,由于是系统代码层面的东西,用户根本没可能去关闭。

最后,说一下海外版安卓机为什么也不上这么大的内存,因为海外版安卓机可以使用谷歌的服务器 (前段时间闹的沸沸扬扬的安卓停止对华为授权事件,实际上就是谷歌不让海外版华为连接谷歌的服务器了) ,而使用了谷歌的服务器,推送机制就变得和iOS一样了,就不需要有APP自己的线程留在后台了,谷歌的服务器会帮APP们接收信息。

国内安卓用户想及时接收消息,开发者也只能使用常驻后台这个方法,而让APP线程常驻在后台,需要大量的内存支持,那国内的安卓机就只好加大内存。那么,谁来为这些多出来的内存买单呢?羊毛都出在羊身上,当然还是用户,还是消费者。这就是我们国内安卓用户的悲催之处,我们不仅要忍受隐私的泄露,还要为这样的行为买单。

目前,国内的APP驻留后台已经把国内的整个安卓生态搞的乌烟瘴气、乱七八糟。其实好多大厂想过解决方案,比如小米推出自己的推送服务,华为也有自己的推送服务,但全都收效甚微。因为没什么开发者去配合他们,一来因为开发者适配的话需要一个厂一个厂去适配,提升了开发成本和维护成本,二来APP开发商也不愿放弃常驻后台带来的利益。

目前比较值得期待的,是安卓推送联盟,这个联盟是由工信部牵头的,运行机制和iOS的推送原理差不多,如果能全面铺开,可以解决上述问题,但这一套现在还在测试阶段,还是个美好的愿望,日后能不能全面铺开还是前途未卜。

所以,苹果不上大内存,真不是厨子抠门,因为没必要了,国内安卓机12G内存都打不过苹果4G内存,为什么?因为12G内存里,很大一部分是留给国产APP常驻后台用的。

作者: 余以为 ,来源:知乎,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK