有些人会觉Android应用没有iOS应用使用得流畅,我觉得主要原因有以下几点:
第一,因为Android平台相较于iOS起步晚,平台不成熟,初期的开发者水平也有限,没有很关注性能优化,只是想做出可用的应用,而未做出好用的应用。
第二,Android相对比较开放,让开发者发挥的空间比较大。比如开发后台永生进程、肆意搜集手机使用信息等这些会影响手机整体性能的行为理论上都是可以做得到,所以有些开发者就利用这种开放性,不顾用户体验,做了很多上不了台面的小动作,导致手机整体使用体验被拖累。
第三,Dalvik运行时机制导致了Android应用相对iOS会慢一些,所以Android团队在4.4版本后使用Art运行时替代了Dalvik,下面我们详细分析下为什么Dalvik运行时会导致慢。
Android是基于Java语言的,iOS是基于Obejctive-C。表现在手机和应用程序运行机制上,Java的代码实际上需要 两次“转换”才能最终以用户可看的程序跑起来,一次发生在开发者发布安装包前,使用开发者自己机器的CPU,另一次在用户启动APP前,使用手机的 CPU。而基于Objective-C的代码只需要一次这种“转换”,在开发者发布安装包前,所以只占用开发者机器的CPU时间。
在编译Android程序时,首先java代码被编译成class文件,然后被java打包工具dx打包成.dex文件, Dex是DalvikVM executes的简称,即Android Dalvik执行程序。然后.dex文件和资源文件一起被压缩成apk文件。APK其实也是zip格式,只是后缀被修改为了apk。Android应用安装过程:复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。这样每次用户点击图标运行android程序时,dalvik虚拟机就会用JIT的方法把dex文件翻译为机器码执行。虽然Dalvik虚拟机已被做过很多优化,但因为此种机制的存在,所以Android在电量消耗和程序运行流畅程度上一直不敌iOS。
Android 4.4版本后这种情况会有很大改观,Android 4.4采用ART模式,可以在用户第一次安装应用时,字节码就会预先编译成机器码,使其成为真正的本地应用。不过也因为这一点,一个应用会占用更大的rom空间,第一次安装时间也会变长。但它带来的好处是远远大于这些缺点的。
以下是Art和Dalvik的对比图
上文只代表一家言论,欢迎大家吐槽。