【巴士数码】1月6日讯:本文来自小米工程师孙鹏在知乎上对提问“如何评价 MIUI 工程师所说「手机 1G 内存够用,少装点 App 就可以了」?”的回答。自行优化Android手机内存请参考:如何让Android手机1G内存就“够用”?
这条微博是我所有微博里面阅读数第二多的,达到了276万,主要是喷的人多,边喷边转发,非常壮观。
先贴一下原文:
“iPhone6用户都不在意1G内存不够,红米2的1G内存够用了,保持流畅的秘诀就是少装app,尤其是不要装xx卫士,xx浏览器这样常驻内存或者特别耗内存的。”
由于新浪微博的字数限制,这条微博只说了结论并没有说理由,可能导致很多人误解。为什么会有那么多人来喷,其中真正原因我至今还不能得到,如果让我猜一下的话,我猜有几个原因:
我拿iPhone6和红米2放在一起对比,iPhone用户愤怒了:“就你还敢跟iPhone比,知道iOS的内存机制是多么牛逼吗,Android怎么能比呢?iPhone6的1G内存够不够是我们果粉内部的事情,你小米的有什么资格评论!” 好比鲁迅笔下的那句很经典的:“你也配姓赵么?”至于那些骂人的标准脏话,我认为都是出于激动,绝不是因为个人素质。
部分把红米2作为目标手机的用户,特别是学生,希望买一部性价比高的手机,本来以为红米2可以有2G内存,这样就不用买那些那么贵的手机了,可以帮爸妈省下不少生活费,结果发现只有1G内存,当然失望。他们眼里的小米就是行业规则的破坏者,就算其它厂商700元的手机只有1G内存,那小米必须要有2G才行。至于那些骂人的标准脏话,我认为都是出于激动,绝不是因为个人素质。
米黑,这个不说了,反正见不得小米好,骂小米这么多年了,小米都进步了,米黑也没什么进步,不提也罢。至于那些骂人的标准脏话,我认为都是故意的,米黑素质如此,没有办法。
对于第一种可能,iOS的内存管理机制,我不认为这些人能说的非常明白,在这里简单介绍一下历史。
在iPhone一代的时候,用户不可以安装第三方app,只能通过浏览器安装网页到桌面。
到了iPhone3G,有了AppStore,用户才可以安装第三方的app。那个时候用户装了app发现iPhone的app和之前的WindowsPhone智能手机不一样,app到了后台就死了一样,尤其是QQ这样的聊天类app,到了后台就掉线。这么设计主要是功耗,因为如果让app在后台运行,功耗会很高,iPhone的电池又太小,所以乔帮主决定不能让app在后台运行,而且嘲笑那些多任务系统都是卡死了的电老虎,其它智能手机则嘲笑iPhone聊QQ老是掉线影响幸福。
为了解决用户反馈最大的后台运行的问题,又要照顾脆弱的小电池,iOS显示增加了有限的多任务功能,给音乐类的app开了绿灯,可以在音乐播放的时候在后台运行。QQ用户还是不能满足。
后来,苹果放出了大杀器:push notification。这个就是说在iOS里面保留一个系统的推送通道,其它app要想通知用户,不需要在后台运行,只要给苹果的推送服务器发一条通知,用户就能收到,然后再打开app。 这确实是一个伟大的创新,没有增加功耗,又解决了用户的问题,唯一的问题是开发者要适配,这对于iOS不是问题,一呼百应,所以所有的app很快都接了推送,app装的多的话,没事就推一下,噼里啪啦推个不停,导致用户不得不关闭推送通知,不然会被烦死。
总结来说,iOS不允许app在后台运行,除非是正在播放音乐的app,反正同时播放的音乐也就一个,所以顶多再多一个app在后台运行,影响不大。最新的iOS8里面新增了app间数据交互的接口,可以实现Android那样的互相调用的效果,不知道会不会导致同时运行的app变多。
对于第二种可能,用户的心情可以理解,钱都是自己辛苦挣来的,大家都喜欢质优价廉的产品,可是内存确实很贵,手机内存比台式机贵了很多,而且内存价格比前两年比还涨价了,地震啊,大火啊什么的,分分钟就涨价,这个确实没有办法,定价权在三星手里,华为也无能为力。
红米2的目标用户是普通用户,不是小米手机的发烧友用户,这些用户平时用的app不多,也就聊聊微信QQ什么的,偶尔用一下其它app,也不怎么打游戏,就算打也是小游戏。我说的1G内存够用当然是针对这些目标用户,红米2只要不装常驻后台和占内存多的app,1G内存还是够用的。三星的Galaxy S3标配1G内存,全球卖了上亿台,在友盟提供的国内Android手机活跃用户排行耪上还排在第四名,仅次于小米手机2和小米手机3。这说明还是有相当大一部分普通用户,可以接受1G内存的手机的。
红米2的真实内存占用情况,@夏永峰 说他一键清理后可以有400M剩余内存,我在外面出差没有实测,等我实测后补上
对发烧友来说,小米有专门为发烧友打造的小米手机,为发烧而生的指导思想不会变。
很多人说Android手机卡,其中的原因有两个:由于内存不够,一些app被杀掉了,再次打开时需要重新加载,时间很长,长到肉眼可分辨,这是Android虚拟机原理导致的,所以卡;一些app在后台运行,抢占了前台app的运行资源,所以卡。
我说一下为什么1G内存够用了,Android最近做了什么,MIUI最近做了什么,是不是一直在努力。
Android一直致力于内存的优化,Android 4.4的目标之一就是在512M的手机上也能运行,Android 5.0默认开启了ART模式,也会节省一部分内存,即使被杀掉,重新加载的时候也会快很多。Google自己的GMS也是内存占用大户,国内行货手机不带GMS没有这个问题,但是预装了一大堆垃圾应用,且都在后台运行,所以还是很卡。Google也推出了和push notification类似的C2DM推送服务,只是国内无法使用,具体原因,你懂的。
MIUI借鉴iOS的内存管理策略,采用了非常激进的内存管理手段,比如禁止app开机自启动,缺省配置下除了微信QQ这样需要后台接收推送的,绝大多数app不允许开机自启动,当然用户可以自己设置。由于Google的C2DM在国内无法使用,MIUI内建系统级推送服务,第三方app可以和iOS上一样,先发通知到MIUI的服务器,在不启动app的情况下把消息推送给用户。在MIUI上,完全没有必要安装任何安全软件和清理软件,这些软件只能导致更多的内存占用和系统的不稳定。
MIUI目前还没有做的是防止后台运行,用户主动打开一个app之后,再切换回桌面,这个app就可能在后台运行,会导致手机变卡。没有做的原因是还没有找到一个特别好的不影响用户体验的方法,让应该在后台的在后台运行,比如导航,不应该的就不运行,不过近期会有一些思路。
对于用户反馈比较大的MIUI自带应用和服务占内存的情况,开发组做了很多优化,比如UI和service分离,这样切换到后台之后可以把UI部分的内存释放;比如减少系统app自启动;比如各种图片的优化。总之就是把系统占用的内存尽量减少,空余出足够的内存给第三方app。MIUI有专门的团队在负责这件事情,都是有十几年经验的非常资深的工程师。
MIUI内部有专门的内存测试流程,如果哪个系统内置app内存占用多了,就会被公示。将来这些内存测试和优化的方法,也会推广给常用的app开发者,一起把Android内存占用大的帽子扔掉。
对于第三种可能,不说也罢,相信用户口碑可以战胜一切米黑。
Android给了开发者一个非常强大和开放的环境,并假设大家都是在克制的使用这些接口,可惜不符合我国国情。我国开发者的理念就是能用就用,开机自启动,后台自启动,设个闹钟把自己唤醒,浮个小窗在桌面上,替换系统锁屏,有时候为了活跃度KPI还经常发发推送,把PC上惯用的招数都用上了。iOS确实很封闭,并假设开发者一定需要管着才行,老子说了算,谁干坏事就处罚谁,想处罚一年就处罚一年,连360都拿他没有办法,但确实符合中国国情。MIUI则取长补短,尽量给用户一个安静平和的手机生态环境。
路还长,大家一起努力。