浅谈instant run

当我接触Compose的时候,我曾经发现过一个奇怪的问题,当我改变一个

TextView里面的Text的时候,我可以不用通过重新run一遍,而是直接改变该text,手机上该APP的text也随之发生改变,当时候以为这个是Compose的新特性,可以不用重新编译,自动在app上展示发生改变的部分。后来知道了热修复这个概念,并且得知热修复是以instant run为基础,然后就浅浅地看了一下instant run,发现instant run和compose的这种现象是有关联的

1.什么是instant run

Instant Run 是 Android Studio 提供的一项功能,它允许开发者在修改应用代码后,无需完整重建和重新安装应用就能将改动推送到已运行在设备上的应用程序中。这意味着对于某些类型的代码更改,开发人员可以在不进行全量编译和安装的情况下,直接看到手机上运行的APP反映出代码变更的结果。然而,并非所有类型的修改都能通过Instant Run立即生效,有些复杂的改变仍需要进行完整的构建与部署流程。

2.instant run遇到的三种不同的场景

2.1 hot swap

比如我就是单纯的想将一个text展示在textview上,我们就可以通过

 

textview.setText(text);

让textview展示出text的东西,但是现在我想展示text1而不是text

那么我们就可以单纯的将text改成text1

 

textview.setText(text1);

当你的gradle和配置都满足instant run的条件后,并且已经开启instant run的时候你会发现,你的textview在不用重新run的时候,textview的展示的数据就发生改变了,这种就叫做hot swap

2.2 warm swap

现在我不改变textview了,我改变button,怎么变呢?我们都知道button默认是一个蓝色偏一点那个紫色的,现在我们改变button的颜色,从蓝色变为红色,当你的gradle和配置都满足instant run的条件后,并且已经开启instant run的时候你会发现可能你这个app原本可能正在执行某件事,现在突然停下来了,然后button的颜色变为红色,这个就是warm swap

2.3 cold swap

最后这次,我不改变什么button的颜色了,不改变什么textview了,我现在直接改变了整个类,并且使用这个类,当你的gradle和配置都满足instant run的条件后,并且已经开启instant run的时候你会发现你的这个app重启了并且重启后这个app展示的是你新修改的东西

2.4三者的区别

首先我们可以发现,hot swap改变的是一段逻辑,warm swap改变的是一个布局,而cold swap改变的是一个类 然后我们会发现,hot swap基本上不会对app运行的进程有什么影响,而warm swap它是会暂停原有的进程,cold swap它直接重启app

3.instant run的原理

Instant run的原理其实挺简单的,首先:将instant run.jar注入到apk中,instant run.jar内部有一个content provider,当你改好代码点击instant run的时候,这个时候android studio自带的ide就会判断,它属于cold swap还是warm swap还是hot swap,我们一般让一个app展示在手机上不是将自己的数据线连接在手机上通过adb将apk发送给手机嘛,此时刚才我们说的那些判断的结果就是通过adb然后将结果发送到content provider来进行接收, 然后如果是hot swap的话,那么在应用进行过程中将新的字节码push到apk对应的类中 如果是warm swap的话,它会将修改的部分整合到一个dex文件,然后push到对应的类,可能会导致进程暂停,但不会导致app重启

Cold swap和warm swap很像,但是它会引起app的重启

4.注意

在提到instant run的原理的时候,我说了句:android studio自带的ide就会判断,它属于cold swap还是warm swap还是hot swap

所以说明如果你用的不是android studio的话,那么这个instant run的功能,你是使用不了的。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值