美文网首页
Instant Run

Instant Run

作者: 白_404 | 来源:发表于2019-12-12 15:26 被阅读0次

    Instant Run简介

    传统情况:修改程序后重新运行,会经历:代码重新编译 -> 停止App程序 -> 重装新的APK -> 重启App程序

    Instant Run:尝试只将程序变更的部分部署到手机上,尽量避免重装或重启动,以此大大提升调试效率。

    Instant Run主要分为三种类型:hot swap、warm swap和cold swap。(AS会根据代码的修改情况,自动选择使用swap的类型)

    当第一次运行程序后,AS中的运行按钮会变成(运行的三角形旁边多了一个闪电符号),说明现在可使用Instant Run了。

    Hot Swap(第一快)

    hot swap:是所有swap中效率最高的,程序不用重装,也不用重启,可以不重启Activity,就可以变更程序。但使用场景比较少

    注意:但hot swap不会重新初始化对象,而某些场景下需要重启Activity才能看出具体的变更内容,所以AS默认是会重启Activity

    更改设置为不重启Activity:Settings -> Build, Execution, Deployment -> Instant Run -> Restart activity on code changes。

    AS视为hot swap的情况:修改一个现有方法中的代码(如:修改按钮点击事件)

    Warm Swap(第二快)

    warm swap:同样不用重装或重启,就可以变更程序,但必须重启Activity(屏幕很快地闪一下,Activity的生命周期会重新执行)。

    AS视为warm swap的情况:修改或删除一个现有的资源文件(如:布局文件中增加一个按钮)

    Cold Swap(第三快)

    Cold Swap:不用重装,但必须重启(为了加载修改的dex文件)

    原理:AS会自动记录项目的每次修改,并将修改的内容打成一个dex文件发到手机,尽管不用重装,但为了加载新的dex文件,App必须重启。

    特别注意:cold swap的工作原理是基于multidex机制来实现的,在不引入外部library的情况下,只有5.0及以上的设备才支持multidex。因此,5.0以下的设备,cold swap将无法工作,会执行最原始的完整APK重装过程。

    AS视为cold swap类型:(比较多)

    1、增删改一个注解、字段、方法

    2、添加一个类

    3、修改一个类的继承结构、类的接口实现、类的static修饰符

    4、涉及资源文件id的改动

    Full APK(完整APK重装过程)

    当程序变更不被Instant Run所支持时,就会执行完整的APK安装过程。

    Instant Run目前都还不支持的情况:

    1、改变AndroidManifest.xml文件的内容

    2、改变被AndroidManifest.xml文件所引用的资源,比如string.xml中的app_name

    3、改变桌面widget的UI相关元素

    Rerun按钮(强制重启App)

    因为hot swap或者warm swap是根本不会重启APP的,而如果你修改了只有在App启动时才会初始化的代码,那么Instant Run对此也是无能为力的,因为修改的代码根本就没有执行到。

    针对这种情况,AS专门提供了一个Rerun按钮(下图中间那个按钮就是Rerun按钮),用来强制重启App。

    绿色转弯箭头

    补充说明

    hot swap会在App的内部开启一个服务器,然后由AS自动计算出方法内实现的变更,将变更代码发送到服务器,服务器再利用类加载器和委托机制将新的代码实现注入到现有App中。

    新的代码实现并没有被保存到本地,即一旦设备和AS的连接断掉了(比如拔掉数据线),使用hot swap替换的代码也就随之不见了。当再次打开App时,会看到提示:(hot swap代码失效了,现在的App仍然使用的老的代码)

    此时只需将手机连上电脑,在AS中重新运行一下程序即可。另外只有在debug模式下才可能会出现这个提示,release模式下是不可能出现的,所以不用担心这个提示会让用户感到困惑。

    整理自:Android Studio新功能解析,你真的了解Instant Run吗?—— 郭霖

    相关文章

      网友评论

          本文标题:Instant Run

          本文链接:https://www.haomeiwen.com/subject/ikovictx.html