目前,我正在开发 React Native 项目,当我在运行项目后摇晃手机时,它会给我实时更新。因为我也使用过 Flutter,所以它也为我提供了相同的输出。但是,在 Android 中有一个称为 Instant Run 的功能。
我用谷歌搜索了即时运行。并且某些结果不同 Instant Run 不是 Android Studio 的 Hot Reload。
所以,我想知道 Instant Run 和 Hot Reload 在工作和功能上的显着差异是什么?
目前,我正在开发 React Native 项目,当我在运行项目后摇晃手机时,它会给我实时更新。因为我也使用过 Flutter,所以它也为我提供了相同的输出。但是,在 Android 中有一个称为 Instant Run 的功能。
我用谷歌搜索了即时运行。并且某些结果不同 Instant Run 不是 Android Studio 的 Hot Reload。
所以,我想知道 Instant Run 和 Hot Reload 在工作和功能上的显着差异是什么?
我无法详细介绍技术细节,但这里有一些实际差异:
Flutter 的Hot Reload和 Android Studio 的Instant Run的工作方式实际上几乎没有区别。
他们都检查代码更改,仅对已更改的内容执行编译步骤,然后将其发送到手机以运行。Android 和 Flutter 应用程序都运行一个能够动态更改类的 VM(jvm 或 dart vm)。
当您执行 Flutter Hot Reload时,它会执行一个快速增量编译步骤,然后将您的 dart 代码发送到手机,它几乎可以立即运行。这速度如此之快,部分原因是 Flutter 在调试模式下运行时使用了 JIT 编译模型,这意味着编译所花费的时间更少,但方法的第一次运行(或前几次运行)可能没有得到优化。在许多情况下,由于颤振的工作方式,状态在更改之间保持不变,而不是通过 dart JIT 处理固有的任何东西。对于某些事情(想到静态和 initState 函数),您实际上必须执行完全重新加载来重新初始化应用程序的状态,但仍然几乎是即时的。
Android Studio for Instant Run非常相似,但始终是完全编译的。VM 有一些工具,因此当调用方法时,VM 会检查是否已注入新类。Instant Run 会尽量少更换;如果它可以简单地替换一些它会的类,但它通常需要替换整个活动,有时甚至是整个应用程序。这是此博客中的一个很好的图表(如果您想更深入地了解,值得一读):
从功能上讲,Instant Run和Hot Reload应该非常相似。但是,在实践中,我发现 Flutter 的Hot Reload比Instant Run快得多,尤其是对于任何大小的应用程序。
此外,我发现 Flutter 处理状态的方式比 Android 活动的工作方式更适合重新计算类。在 Flutter 中,您有许多与 UI 相关的类,每个类都有自己的状态,只需更改其中的几个就非常快。或者,在 Android 中,您倾向于拥有更大的 Views 或 Activity UI,这需要花费更多精力来替换,并且通常会导致重新加载 Activity,而不仅仅是一个类。