当前,我正在从事React Native Project,当我在运行Project之后摇动手机时,它会为我提供实时更新。因为我也曾与Flutter合作,所以它也为我提供了相同的OutPut。但是,在Android中有一个称为“即时运行”的功能。
我已经搜索了“即时运行”。并且某些结果有所不同。AndroidStudio的“即时运行”不是“热重装”。
所以,我想知道即时运行和热重装的工作方式和功能上的显着区别是什么?
答案 0 :(得分:4)
我无法详细介绍技术细节,但有一些实际差异:
答案 1 :(得分:4)
Flutter的 Hot Reload 与Android Studio的 Instant Run 的工作方式实际上几乎没有区别。
它们都检查代码是否更改,仅对已更改的内容执行编译步骤,然后将其发送至手机以运行。 Android和Flutter应用程序都运行VM(jvm或dart vm),该VM能够即时更改类。
执行Flutter Hot Reload 时,它会执行快速的增量编译步骤,然后将您的dart代码发送到手机上,并在该手机上立即运行它。之所以这么快,部分是因为Flutter在调试模式下运行时会使用JIT编译模型,这意味着编译所花的时间更少,但可能无法优化方法的第一次运行(或前几次运行)。在许多情况下,状态是在变化之间保持不变的,这是因为抖动的工作方式,而不是通过飞镖JIT处理固有的任何方式。对于某些事情(想到静态和initState函数),您实际上必须执行 Full Reload (完全重新加载),该操作会重新初始化应用程序的状态,但仍然几乎是即时的。
用于即时运行的Android Studio非常相似,但始终经过完全编译。 VM具有某种检测功能,因此在调用方法时,VM会检查是否已注入新类。 Instant Run会尽量减少更换。如果它可以简单地替换某些类,那么它将替换,但是它通常需要替换整个活动,有时甚至替换整个应用程序。这是this blog中的一个很好的图表(如果您想更深入地理解,值得阅读):
在功能上,即时运行和热重载应该非常相似。但是,在实践中,我发现flutter的 Hot Reload 比 Instant Run 快得多[strong>相当,特别是对于任何大小的应用程序。
此外,我发现与国家打交道的方式比Android活动的方式更适合于重新计算的类。在Flutter中,UI中涉及许多类,每个类都有各自的状态,并且只需更改其中几个即可。另外,在Android中,您倾向于具有更大的“视图”或“活动UI”,这需要花费更多的精力进行替换,并且常常导致重新加载活动,而不仅仅是在这里和那里的类。