为什么1G内存iOS已经足够而安卓却很卡?

昨天红米2代手机正式发布,针对网络上很多质疑红米2代只有1GB运行内存的声音,小米高管孙鹏用iPhone6来做类比,称红米2代用1GB运行内存也可以很流畅。那么事实真的如此吗?
  
  要保持安卓手机流畅,少装App确实有用,不过iPhone 6是否流畅和少装App却没有半个F码的关系。
  
  iOS 8让人们第一次发现原来苹果也会卡顿,而与之相比,Android卡成Shit却早已名声在外。
  
  Google在推出4.4时发明了ART (Android runtime)来解决卡慢, 5.0时又用ART彻底取代Dalvik,号称实现高效、省电、流畅的Android系统目标已经实现。
  
  安卓机真的能不再卡顿了吗?一切还得从根源说起!
  
  四大先天因素埋下卡顿根源
  
  第一、基因使然。iOS只需要保证在苹果仅限的几款移动设备上的运行体验,而Android则需要保证能兼容尽量多的已存在和未存在的不同硬件组合。
  
  iOS老祖,UNIX之父Ken Thompson
  
  Android老祖,Linux之父Linus Torvalds
  
  iOS基于Apple的OSX,而OSX基于FreeBSD ,FreeBSD又是在UNIX上衍生的,其根源可以追溯到1969年。Android基于Linux,起源于1991年Linus Torvalds的一个简单需求。
  
  其实从起源之处就能看出未来命运的注定不同:
  
  UNIX是与硬件配套的商业软件,而Linux则是可运行在多种硬件上免费自由的开源系统。
  
  一个为指定硬件定制优化的系统与一个要在上万种奇葩配置上跑起来的系统相比,结果会如何?
  
  第二、 响应机制。iOS最先响应屏幕反应,而Android响应屏幕排在应用与框架之后。
  
  iOS响应顺序依次为Touch——Media——Service——Core架构,当用户只要触摸接触了屏幕之后,系统就会最优先去处理屏幕显示也就是Touch这个层级,然后才是媒体(Media),服务(Service)以及Core架构。
  
  Android 的优先级响应级别则是Application——Framework——Library——Kernal架构,和显示相关的图形图像处理这一部分属于 Library,当你对屏幕操作之后,Android系统首先会激活应用、框架,然后才是屏幕最后是核心架构。
  
  第三、开发语言。iOS采用执行效率极高的Objective-C语言,而Android采用的Java语言因为虚拟机的存在,二次转化再执行效率很低。
  
  Android开发是基于Java“Write once, run anywhere”理念,正因为这个理念,引入了虚拟机,也就是说编码实际上需要“转换”才能最终以用户可看的程序跑起来。
  
  第四、后台管理方式。iOS中的后台程序并不是指当前后台运行程序,其实是你最近使用过的程序使用记录,比如浏览器的网页浏览记录。
  
  Android的后台则是一直在内存中运行,程序在进程活动停止后都会保留在内存中,直到系统需要更多内存再释放这部分资源。
  
  这个后台管理机制造成用户感知的差异化放大,Android旗舰已进入8核CPU、3G RAM的级别,而iOS却只需要双核1G就能保持稳定流畅的头衔不动摇。
  
  三大后天因素拉低用户体验
  
  其实Android与iOS相比,除了四大先天不同所造成的差距外,还有三大后天因素让Android的体验越来越不尽如人意。
  
  1、无序的开发者
  
  Android的开放与自由带来了大量的开发者,也让一部分不遵守规范的开发者进入Android的世界,于是应用开始肆意挥霍硬件资源,不少程序都开始自动启动。
  
  当你安装了不少的应用之后就会发现,这些应用都开始驻留后台。杀掉这些应用的进程无助于解决问题(因为他们会自动重新启动,不断地杀进程会造成他们不断重启,最终耗光你的电池),最后你只能彻底删除他们。
  
  因为这个删除的用户需求,一款叫做Clean Master的应用还带动了猎豹移动的上市。
  
  2、无奈的Android Market
  
  由于一些让人无奈的原因,各种水平不齐、鱼龙混炸的第三方市场充斥于市。而即使在官方的Google Play也经常爆出恶意软件或者仿冒软件。混乱的市场和不守序的开发者让Android的应用环境进入一个越来越差的死循环。
  
  3、无解的碎片化
  
  100个Android手机制造商从Google那拿到Android代码之后,就可以制造出100种搭载不同硬件平台、界面的Android手机,即使是搭载完全相同的硬件,不同品牌的机器,运行速度,软件兼容性都会有区别,这就是Android开放带来的碎片化。
  
  就这样,无论在先天还是后天上Android都注定着一些越来越卡,曾经的4.4没能解决,5.0也不会解决。
  
  那么Android 5.0 Lollipop若是没能解决卡顿,又到底改变了什么?
  
  1、改变了运行环境,却没改变运行秩序
  
  ART带来的体验明显提升,告别了虚拟机的Android 更快更省电,不过对于一些不遵守规则的应用而言什么都没变,还是想怎么折腾就怎么折腾。
  
  2、加剧了本已严重的碎片化
  
  Lollipop的推出让很多Android用户欢呼了一阵,几个月过去后他们发现真相,自己的手机连4.4的官方更新都还没收到。于是大家就都明白了将希望寄托在新版系统身上,还真不如刷个CM或者MIUI包。
  
  所以Android的卡顿其实从根源上就注定了没有办法解决,除非Google愿意放弃现有市场全部推倒重来,不过那样的系统和Android已经没有任何关系了吧?
  
  其实Android粉丝们不必过分担忧卡顿,iOS粉丝也不必庆幸流畅,毕竟库克的iOS 8已经开始砸金字招牌,说不定到了iOS 10与Android 7.0发布,大家都会变得一样,没个十核CPU加上8G内存大家都会变得一样卡了呢?
  
  反观Android方面,尽管这个系统有各种各样的缺点,但是优点也很明显,那就是很多手机都采用Android系统,但是每一款手机都可以做的和别人不一样,这种自由的定制系统主题桌面的特性,是iOS用户最为羡慕的。www.zgios.com

时间: 2024-10-29 02:00:40

为什么1G内存iOS已经足够而安卓却很卡?的相关文章

解决ios手机页面overflow scroll滑动很卡的问题

解决ios手机页面overflow scroll滑动很卡的问题 今天在IOS系统上测试 webAPPApp的时候发现使用了position:fixed/absolute时,DIV容器里面下滑动没有像普通页面一样顺畅,手滑到哪就停到哪.感觉很卡一样,而安卓效果正常,算是一个bug.终于在网上找到了一个解决方法. -webkit-overflow-scrolling:touch; 加上去后果然有用,也就是说DIV容器使用的定位属性引起的.当时效果是弹出一个层,body无滚动条,但是弹出层需要可以上下

8168开发之---1g内存换成512M的内存映射配置

最近在帮新来同事调式内存分配,起初是将config.bld 中的内存在标配的基础上减少sr1,和tiler 将dsp从9m增加到16m,然后编译通过, 可是在加载的时候卡住了,init.sh 过,load.sh 加载vpss pri2 时卡住了 printf ("Attached to slave procId %d.\n", procId); 费解,小盘说,是uboot起始地址问题,暂时要刘总改改uboot,如果不行那得跟踪下打印,可以确定的是是内存地址加载错误,导致死循环卡住 ht

Myeclipse 工具优化 [内存一直增加, jsp,javascript 编辑很卡]

首先看这篇随笔 地址: Myeclipse/STS 首次在本地部署配置一个Spring MVC 项目 (十二) [http://www.cnblogs.com/editor/p/3915239.html] 这步是每新建个工作空间都应该配置的步骤,这步配置好,把项目源码导进去,空间构建,代码没异常错误,运行编译服务器 (如:Tomcat) 成功后,再做下面的配置; 工具环境优化配置 我们在开发一个差不多大的系统,差不多项目在70.80M以上,也可能是一些小项目,Myeclipse 刚运行的时候,看

Myeclipse 优化 [内存一直增加, jsp,javascript 编辑很卡]

首先看这篇随笔 地址: Myeclipse/STS 首次在本地部署配置一个Spring MVC 项目 (十二) [http://www.cnblogs.com/editor/p/3915239.html] 这步是每新建个工作空间都应该配置的步骤,这步配置好,把项目源码导进去,空间构建,代码没异常错误,运行编译服务器 (如:Tomcat) 成功后,再做下面的配置; 工具环境优化配置 我 们在开发一个差不多大的系统,差不多项目在70.80M以上,也可能是一些小项目,Myeclipse 刚运行的时候,

linode升级月付5美元1G内存1T流量1Gbps机房带宽

linode在情人节当天进行了产品升级,新的套餐月付只需$5美元,配置十分诱人: Linode 1GB套餐配置 月付$5/mo 即($0.0075/小时) 内存 1GB RAM CPU核心 1CPU Core 硬盘 20GB SSD Storage 月流量 1TB Transfer 入口带宽 40Gbps Network In 出口带宽 1000Mbps Network Out Linode 2GB套餐配置 月付$10/mo 即($0.015/小时) 内存 2GB RAM CPU核心 1CPU

在iOS中实现类似安卓自动消失提示框

类方法: + (void)showMessage:(NSString *)message { // 获取window UIWindow *window = [UIApplication sharedApplication].keyWindow; UIView *showView = [[UIView alloc] init]; showView.backgroundColor = [UIColor blackColor]; showView.frame = CGRectMake(1, 1, 1,

iOS开发系列--并行开发其实很容易

--多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行.改变这种状况可以从两个角度出发:对于单核处理器,可以将多个步骤放到不同的线程,这样一来用户完成UI操作后其他后续任务在其他线程中,当CPU空闲时会继续执行,而此时对于用户而言可以继续进行其他操作:对于多核处理器,如果用户在UI线程中完成某个操作之后,其他后

iOS开发系列--并行开发其实很容易多线程

概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行.改变这种状况可以从两个角度出发:对于单核处理器,可以将多个步骤放到不同的线程,这样一来用户完成UI操作后其他后续任务在其他线程中,当CPU空闲时会继续执行,而此时对于用户而言可以继续进行其他操作:对于多核处理器,如果用户在UI线程中完成某个操作之后,其他后续操作在别的线程

安卓读取SD卡的容量

在开发中,我们经常会用到SD卡,那么在对SD卡进行读写的时候,我们经常需要判断SD卡的剩余容量是否足够.因此,这次我们来写写获取SD卡容量的程序. 该注意的地方,我都在程序里面有注明了.看程序基本就懂了哈. 先来看看运行结果截图吧. 布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sche