Android为什么卡顿?为什么用起来不如iOS流畅

Android手机为何还是卡?

         系统图形界面的时候,如果画图的工作都交给CPU完成,这效率是可想而知的,犹如你让一位精通数学的同学画图,多少他倒是能画,只是能不能画好很成问题。如果GPU,也就是专门的画图工作者能够协助这个过程,情况自是大不相同。虽说系统流畅性是个相当大的话题,但硬件加速是否做得好就成为其中的重要因素。

   完善如上所述的这个过程,几乎是贯穿Android 2.x早期,到最新的Android 5.1,甚至此后很长一段时间内,谷歌需要努力的方向。针对系统图片、网页等2D图形绘制,Android所用的是谷歌早在2005年就收购的 Skia(那时Android都还没出生,Chrome也采用Skia作为2D图形引擎)。

   Skia原始版本的图形光栅处理完全基于CPU和软件运算,也就是说早期Android的2D图形绘制对GPU的利用率存在严重不足,相较iOS和Windows Phone这种在硬件加速领域有着很久积累的系统完全不是一个水平。

   在Android的系统设置-调试选项中,有个“强制进行GPU渲染”选项,开启这个选项以后会发现某些应用的运行的确更流畅了,但有些则出现了更 糟糕的使用体验。在Android 2.3时代,国外科技博客DorothyBrowse特别强制开启这种Skia GPU加速,尝试进行Webkit渲染(Chrome的渲染引擎)测试,结果发现相较CPU自己画图,所谓的GPU加速居然出现了反效果,可知当时的 Skia GPU加速在Android平台有多么不成熟。

   在Android 3.0之前,这套系统都没有真正行之有效的图形加速方案(即便从初版开始,Android就在努力融合硬件加速),Android 3.0才实现窗口相对完整的硬件加速绘制。实际上,即便是到Android 4.1,谷歌大肆宣传的黄油计划,过渡动画帧率达到60fps,通过预判和缓冲来提升效率,其GPU加速支持也并不完整。谷歌自己的官方文档中就提到,并 不是所有2D图像操作的API都已经支持硬件加速。

   不过总的说来,Android的GPU加速是朝着逐步完善的方向发展的,最新版相较过去已经有了很大程度的提升,从系统级应用和各类操作这些年来流畅度的明确提升就能感觉得到,即便这种提升在iOS和Windows Phone面前还是显得有些无力。可是来到第三方应用,这个问题又变得非常复杂。

   第三方应用质量很悲剧

   在宣称如“丝般顺滑”、甚至“赶超iOS”的Android4.1问世以后,不说和iOS比实际如何,其系统级应用倒真的流畅了很多,可是第三方应用死性未改,该怎么卡还是怎么卡。这就是个相当复杂的问题了。

   其一,在Android一步步向前的步伐中,APILevel越高,GPU硬件加速也的确愈加完善,比如Android5.1所用API Level 22。所谓的API Level,标识的是Android平台框架的API版本。这个API可以理解为Android所跑虚拟机针对应用开发而支持的功能,随着版本号的变化, 这些“功能”在发生着升级或转变。对Android的系统应用而言,采用最新的API是理所当然的,流畅性也保持在最佳状态。

   但对第三方应用来说,采用最新的API,就意味着对旧版本系统的抛弃。比如微信应用更新,如果很任性地用上API Level 22,那么最新版的微信将只支持Android 5.1,人类可以忍受吗?所以微信迄今为止还在采用API Level 9,则为API Level 14。这种API的迭代,也是苹果为何高度追求系统一致性的重要原因。想想Android系统的碎片化问题,第三方应用要变得更高效,好像是个根本无法完成的任务。

   这还只是第三方应用开发的一环。其二,Android应用开发者的“随性”让Android应用的效率更加悲惨。比如说谷歌在应用开发的指导原则中提到,如果应用不够流畅,应该看看是否存在“过度渲染(OverDraw)”的问题,就是布局重叠、重复绘制。

   要检查这个问题,有兴趣的同学可以一起来做这个实验。在Android系统设置的开发者选项中,选择“显示GPU过度绘制”,此时整个界面变得花花 绿绿一片。这些色块所表达的是,无色透明状态为最佳,蓝色表示很好,绿色为不错,浅红色表示较差,深红色为过度绘制问题严重。类似Instagram等应 用的情况似乎挺好,而某博和Facebook过度渲染的问题就很严重。这只是Android应用开发中的一个例子,如此这般罔顾开发原则的状况那是数也数 不清的。在Android相对开放的应用世界中,这种情况是不会有警察去抓的,显然iOS全程把关App Store就不会这么悲剧。

   其三,在天朝这样一个奇特的国度,开放的系统无疑为许多应用开发商提供了大好机会。很多应用当安装到你手机中,其行为习惯可能是你完全不知道了,而且可能实情会更令你震惊,这就是下面一个话题了。

   内存居然还不够用?装越多APP手机越卡

   相关Android装越多应用,手机越卡的解释非常多样,甚至包括对于固态存储原理的解释。或许这些都是原因所在,不过更关键的原因是这样的:Android系统中有个叫做Receiver(接收器?)的东西,负责传递系统接收到的变化,就像是神经系统。比如说按下Power键锁屏,长按关机,或者长按相机按键启动相机应用,或者插入耳机,都是在Receiver接收到以后通知相应apk,后由程序给出响应。

   应用本身就可以跟系统注册任何形式的Receiver,其较大的用处之一是通知系统启动某个程序。比如YouTube的Receiver在开机时、 系统语言切换后、系统账户改变后这三种情况下自动启动YouTube应用本身——这是个比较常见的Receiver。而国内的诸多“异士”是如何写 Receiver的呢?

   某些著名视频站APP在下面这些情况下都会启动,包含开机时、网络状况改变时(2G、3G与WiFi间切换)、安装其它App时、卸载其它APP 时、用户唤醒机器时.。。对于用户而言,无论你怎么杀进程清内存,只要这些操作被触发,Receiver就会启动相应程序,话说连个WiFi、下个新应用 都要启动该应用,哪有透明度可言,真是独有社会主义特色。

   此类国产APP相当多见,常见Receiver动作还有:耳机拔出或插入时、文件下载完成后、WiFi扫描SSID完成后,都启动程序,是不是感觉 灰常神奇?它们的宗旨就是永远不会被你杀死,什么一键杀进程,分分钟给你活过来,除非彻底卸载它们,或禁用相应Reciever。在这种情况 下,Android系统对于内存容量的要求自然是非一般的。

   所谓的内存回收机制此刻都已不值一提,何以iPhone 1GB内存流畅运行至今,而Android现如今已是3GB时代;这也是很多Android优化文章告诉用户,如果某应用一周不用就卸载的核心所在,环境使然。你听说过iOS优化让用户卸应用的吗?

碎片化问题让Android千疮百孔

   可以说,除了Android本身的顽疾之外,导致上述绝大部分问题的根源就是Android的碎片化,无论是Android自身开放的态度让各种高 配、低配的手机都在使用,还是手机制造商对Android进行的二次开发。要将硬件加速做好、规范第三方应用质量,在Android开放的理念下是几近不可能完成的任务,且谷歌自己都难以收拾局面。

   Android的开放和碎片化带来的问题还远不止上面这些,一个典型的例子是iOS和Windows Phone都具备了特别出色的信息推送机制,比如说QQ、微信接收消息,在iOS和WindowsPhone中,应用本身不需要常驻后台,通过每台手机和推送服务器保持唯一连接,就能收到推送通知,无论对性能和功耗的节省都具备了极大的意义。

   Android系统当然也具备了消息推送的可行性,但由于碎片化问题,以及国内因为某种原因不得不去掉谷歌服务的现状,令Android不同应用采 用五花八门的推送机制。许多Android应用获取消息的方式是轮询(而非推送),即应用主动地与服务器连接并查询是否有新消息,可想而知它对系统和网络资源的消耗。

   关乎Android系统本身,则除了文首提到的虚拟机机制,还有许多相当微妙的问题形成它与iOS之间的流畅性差异,比如Android对多任务的 支持更类似于桌面系统,本身就只有靠堆砌硬件才能满足这种多任务的需求,当然iOS的多任务也已经不像很多人理解的那样,是多年前的“假后台”了,它针对 第三方应用开放的多任务API正越来越多。

   总之,Android的卡顿和不流畅是个极其复杂、庞大的问题,上面所提的这些也只是挖掘了其中的一部分。就Android系统的发展轨迹来看,从 初代问世至今,其发展史都可以看做是谷歌在系统流畅性问题上所做的一次次努力,流畅性改善甚至是Android前行的一条线索,所以谷歌也才毫不吝啬地一 次次地宣传,我们的系统更流畅了,不管相较竞争对手有多大差距和多少不可控性,现在的Android也已经比过去流畅了很多,虽然未来还有很长的路要走。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值