Android 7.0应用安装速度为什么那么快?

 更新时间:2017年7月6日 23:15  点击:1907

去年三月份,Google发布了首个Android 7.0(Android Nougat)测试版,五月份发布正式版,虽然至今Android 7.0不足5%的市场占有率,足以让苹果笑掉大牙,但是随着三四月份新机扎堆发布,Android 7.0肯定会迎来一波爆发。或许你会问,Android 7.0有什么好的,我现在用6.0稳定得很呢,倒还真有一个能让你有真切感受的变化,用我们小超哥的话讲就是“震惊!Android 7.0应用安装速度飙升666%!”,你还别不信,先看看小超哥做的一个与Android 6.0的对比视频:

Android 7.0与Android 6.0应用安装速度对比

视频中用的测试手机为Nexus 5X,在Android 6.0中,安装同一版本的手机淘宝用时28秒,升级到Android 7.0后,安装手机淘宝仅用时14秒,请问你震惊了吗?

下次有基友或妹子问你Android 7.0有什么好的时候,你完全可以大胆告诉他们,Android 7.0的软件安装速度快了一倍啦~~~~不信你上超能网看看对比视频,万一妹子惊呆了,追问一句,怎么会快这么多呢,你肯定不能回答不知道吧,所以我军从不打无准备之仗,要做一个脱离低级趣味一个有益于人民一个BIGGER满满的人,你必须往下看。

Android 4.4时的JIT解决方案

故事还得回到几年前,还是Android 4.4的时代,那时Android还是用的Dalvik虚拟机,配合的是JIT编译器(Just In Time,即时编译器),其实Google在Android 2.2时就添加了JIT。当APP运行时,JIT编译器就会对新类进行编译,经过编译后的代码,会被优化成相当精简的原生型指令码,这样在下次执行到相同逻辑的时候,速度就会更快。

JIT是在运行时编译,优缺点很明显,安装速度快占用存储空间小,主要问题是在运行时编译开销大,容易造成卡顿,所以在这之后,Google果断壮士断腕,在Android 5.0和Android 6.0中放弃了Dalvik转投ART(Android Runtime)虚拟机怀抱,编译策略也弃JIT改用AOT(Ahead Of Time)方案。

Android 6.0采用了AOT编译方案

ART的策略与Dalvik不同,应用在第一次安装的时候,字节码就会预先编译成原生型指令码,使其成为真正的本地应用。以后运行APP时,不需要再进行编译,启动速度和运行速度都提高了,也就不那么卡顿了。

但是这种方案也有明显缺点,就是在安装中要全面预编译,安装时间难免长,而且会消耗掉更多的存储空间,根据我们的测试,手机淘宝这个APP在Android 6.0系统中应用存储大小为171MB,在Android 4.4系统中占用为154MB,相当于占用空间多了10%。截图就不贴了,有兴趣的朋友可找小超哥(微信9501417)索取。

在Android 7.0中,Google进一步改进了编译策略,这次他直接来了个Hybrid Mode,也就是AOT + JIT混合模式,糅合了两者的优点:

Android 7.0的编译策略

Google是这么说的:Android 7.0添加了一个JIT编译器与代码分析到ART,JIT编译器是对ART当前的AOT编译器的一个补充,提高运行时性能,节省存储空间,加快应用程序更新和系统更新。

在Android 7.0中,安装应用时不再像6.0那样对应用代码进行完整的预编译,而是会根据JIT编译器的分析结果,在设备充电或其余空闲时间对“cold code”进行解释,对于“hot code”,则在实际使用时由JIT进行编译,因此应用安装时间和占用空间大大减少了,像手机淘宝这个APP在Android 7.0系统中的占用大小为156MB,和Android 4.4系统中非常接近。主要的是,它还不会影响到应用的运行速度。

Android 7.0中的JIT架构 - 它是如何工作的

总结一下,在Android 7.0,采用了AOT + JIT混合编译策略,带来的好处如下:

﹒APP安装时间大幅缩短,只有Android 6.0系统的50%;

﹒系统升级OTA速度加快,不再需要优化;

﹒应用占用空间更少,一般会少10%;

﹒降低系统开销,改善电池消耗。

相关阅读:

国行S7/S7 Edge Android 7.0正式推送:体验性能大提升

哪些手机能升级安卓7.0?这些国行机能升级Android 7.0

[!--infotagslink--]

相关文章

  • JS跨浏览器解析XML应用过程详解

    这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
  • vivo X9如何查出后台偷跑流量应用?vivo X9查出后台偷跑流量应用的方法

    vivo X9如何查看后台流量偷跑的情况?小编教你轻松查到!还不了解的小伙伴快来看看吧! 1)打开手机自带的【i管家】应用,打开后点击【流量监控】选项。(如下图) 2)接着选...2016-12-31
  • PHP云存储Redis的应用场景与Redis实现排行榜功能

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本文我们来讲解Redis的应用场景实例。 C...2016-11-25
  • PHP explode()函数的几个应用和implode()函数有什么区别

    explode()函数介绍explode() 函数可以把字符串分割为数组。语法:explode(separator,string,limit)。 参数 描述 separator 必需。规定在哪里分割字符串。 string...2015-11-08
  • PHP Libevent扩展安装配置及简单应用

    Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,下文我们就一起来看PHP Libevent扩展安装...2016-11-25
  • php中echo <<< 的应用

    <? $a="变量的值将被带入"; echo <<< help <pre> php中echo <<< 的应用 虽然echo "...";可以断行,但若其中如出现",则仍需做转义 处理。需写做: echo " ...2016-11-25
  • PHP-GTK 介绍及其应用

    1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
  • Vue中keep-alive的两种应用方式

    这篇文章主要介绍了Vue中keep-alive的两种应用方式,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
  • css中Float属性深入剖析与应用

    这篇文章介绍了css中的float属性的应用和理解,让设置的标签产生浮动效果。希望能帮助到有需要的同学。 一、Float的特性 1. 应用于文字围绕图片 2. 创建一个块级框...2017-01-22
  • ajax简单与ajax+php实例应用(1/4)

    [ajax介绍]   ajax是使用客户端脚本与web服务器交换数据的web应用开发方法。web页面不用打断交互流程进行重新加裁,就可以动态地更新。使用ajax,用户可以创建接近本地...2016-11-25
  • php ob_start() ob_end_flush()缓存技术简单应用

    本文章介绍了一个简单的关于php入门篇-缓存技术简单应用,有需要的朋友可以看看哦,这里是利用了ob_start(); ob_end_flush(); 来实例的。 代码如下 复制...2016-11-25
  • Android 应用包 apk 的内部结构详解

    Android应用程序会通过一个工具将应用所有的CLASS文件转换成一个DEX文件,而后Dalvik虚拟机会从其中读取指令和数据。 Android 是Google开发的基于Linux平台的开源手机操...2016-09-20
  • 时隔数日苹果又发布了iOS 10.2 Beta3:TV应用来了

    网易科技讯 11月14日消息,据美国媒体报道,当日苹果开始推出iOS 10.2 Beta3公开测试版,距离发布iOS 10.2 Beta2发布后仅数日。此外,苹果还推出数周前发布MacBook Pro时提到的TV应用,现在该应用有了Up Next功能。...2016-11-22
  • c#多线程的应用全面解析

    这篇文章主要介绍了c#多线程的应用,有需要的朋友可以参考一下...2020-06-25
  • 重新应用默认的安全设置 : 安全配置和分析

    安全配置和分析概述“安全配置和分析”是分析和配置本地系统安全性的一个工具。...2016-01-27
  • PHP中的表单应用释疑

    综述:表单作为用户提交信息的一个要害途径,一直是PHP编程中的一个最基本的方面,也是入门者会碰到的一个大的重点与难点。我们选择有关处理关联数、获得同名checkbox的选取...2016-11-25
  • php多线程thread开发与应用的例子

    Php多线程的使用,首先需要PHP5.3以上版本,并安装pthreads PHP扩展,可以使PHP真正的支持多线程,扩展如何安装请自行百度 PHP扩展下载:https://github.com/krakjoe/pthre...2016-11-25
  • 利用EF6简单实现多租户的应用

    这篇文章主要给大家介绍了关于如何利用EF6简单实现多租户应用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用EF6具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2021-09-22
  • SQL SERVER应用问题解答13例(二)

    问:Tempdb In Ram的配置出错怎么办?   答:SQL Server提供了将Tempdb存放在内存中的机制,以提高系统效率。但是,如果把“Tempdb In Ram”的值设置过 大,会导致SQL Server...2016-11-25
  • Node.js 应用跑得更快 10 个技巧

    Node.js 受益于它的事件驱动和异步的特征,已经很快了。本文将介绍 10 条,经过检验得知可大大提高 Node 应用的技巧。废话不多说,让我们逐条来看看...2016-04-06