Android Studio中的Instant Run

来源:互联网 发布:怎么注册网络域名 编辑:程序博客网 时间:2024/05/16 10:46

Android Studio 2.0中编译速度和部署的速度有了很大程度的提示,但是安装速度没有得到显著提升,于是在Android Studio 2.0中加入了Instant Run功能,可以显著提高安装速度。

传统情况下,我们修改程序后重新运行一次程序需要经历代码重新编译->停止程序->重新安装->重新启动,而 Instant Run 则只将程序变更的部分部署到手机上,尽量避免重新安装或重新启动程序,以此提升调试程序的效率。

当我们第一次运行程序后

这里写图片描述

可以看到闪电符号亮了,说明现在可以使用 Instant Run 了

Instant Run 主要分为三种类型:

  • hot swap
  • warm swap
  • cold swap

(1) hot swap

hot swap是所有swap方式中效率最高的一种,应用程序不需要重新安装,也不需要重启就可以完成程序变更。但是hot swap不会对程序中的对象进行重新初始化,也就是说可能某些场景下需要重启Activity才能看出具体的变更内容。Android Studio对于hot swap这种情况默认是重启Activity的,当然你也可以到设置中去改变这一默认行为,具体路径是 Settings -> Build, Execution, Deployment -> Instant Run -> Restart activity on code changes。

hot swap的适用条件比较少,只有一种情况会被Android Studio视为hot swap类型,就是修改一个现有方法中的代码

(2) warm swap

warm swap也非常快,这种swap类型同样不需要重新安装或重启程序就可以完成程序变更,但是warm swap要求必须重启Activity。你会在界面上看到屏幕很快地闪一下,同时Activity的生命周期会重新执行。

warm swap的适用条件也比较局限,只有一种情况会被Android Studio视为warm swap类型,就是修改或删除一个现有的资源文件

(3) cold swap

cold swap相对而言就要更慢一些了,Android Studio会自动记录我们项目的每次修改,然后将修改的这部分内容打成一个dex文件发送到手机上,尽管这种swap类型仍然不需要去安装一个全新的APK,但是为了加载这个新的dex文件,整个应用程序必须进行重启才行。另外,cold swap的工作原理是基于multidex机制来实现的,在不引入外部library的情况下,只有5.0及以上的设备才支持multidex,因此,如果你使用了5.0以下的设备,那么cold swap就无法工作了,这种情况会执行最原始的完整APK安装过程。

cold swap的适用条件非常多,下面我列出一个详细的清单,有哪些情况会被Android Studio视为cold swap类型:

添加、删除或修改一个注解
添加、删除或修改一个字段
添加、删除或修改一个方法
添加一个类
修改一个类的继承结构
修改一个类的接口实现
修改一个类的static修饰符
涉及资源文件id的改动

除了满足以上条件的其他程序变更,Instant Run目前都还不支持,主要包括以下一些情况:

改变AndroidManifest.xml文件的内容
改变被AndroidManifest.xml文件所引用的资源,比如string.xml中的app_name
改变桌面widget的UI相关元素

0 0