作者:vincent | 来源:互联网 | 2022-12-06 14:45
如何解决《Android的InstantRun与Flutter的HotReload和ReactNative的HotReload之间的区别?》经验,为你挑选了2个好方法。
目前,我正在从事React Native Project,当我在运行Project之后摇动手机时,它会提供实时更新。因为我也曾与Flutter合作,所以它也为我提供了相同的OutPut。但是,在Android中,有一个称为“即时运行”的功能。
我已经用Google搜索了即时运行。并且某些结果有所不同。AndroidStudio的“即时运行”不是“热重装”。
因此,我想知道即时运行和热装的工作和功能上的显着区别是什么?
1> boformer..:
我无法详细介绍技术细节,但是有一些实际差异:
Flutter Hot Reload比Instant Run快很多
即时运行有时会失败并导致完全重建,这可能需要几分钟的时间。
保存文件时会自动计划Flutter Hot Reload,并且没有延迟。即时运行会导致很多延迟,这会分散注意力。
Flutter Hot Reload不会丢失任何状态,但是在使用Instant Run时,经常会发生应用重置的情况
Flutter还允许您在不到一秒钟的时间内重启应用程序(重置状态)(在Android中可能需要几分钟)
当应用程序在后台运行时,Flutter Hot Reload也可以使用
在对Flutter应用程序的本机Android和iOS Shell进行更改时,Flutter Hot Reload不会为您提供帮助。您必须使用Gradle / XCode进行完全重建(这也会重置状态)
2> rmtmckenzie..:
实际上,Flutter的Hot Reload和Android Studio的Instant Run的工作方式之间几乎没有什么区别。
他们都检查代码更改,仅对已更改的内容执行编译步骤,然后将其发送到手机以运行。Android和Flutter应用程序均运行VM(jvm或dart vm),该VM能够即时更改类。
当您执行Flutter Hot Reload时,它会执行一个快速的增量编译步骤,然后将您的dart代码发送到手机上,该代码几乎立即运行。之所以这么快,部分是因为Flutter在调试模式下运行时会使用JIT编译模型,这意味着编译所花费的时间更少,但可能无法优化方法的第一次运行(或前几次运行)。在许多情况下,状态是在变化之间保持不变的,这是因为抖动的工作方式,而不是通过飞镖JIT处理固有的任何方式。对于某些事情(想到静态和initState函数),您实际上必须执行“ 完全重装”,它会重新初始化应用程序的状态,但仍然几乎是即时的。
Android Studio for Instant Run非常相似,但始终经过完全编译。VM具有某种检测功能,因此在调用方法时,VM会检查是否已注入新类。Instant Run会尽量减少更换。如果它可以简单地替换某些类,那么它将替换,但是它通常需要替换整个活动,有时甚至替换整个应用程序。这是此博客中的一个很好的图表(如果您想更深入地理解,值得阅读):
在功能上,即时运行和热重载应该非常相似。然而,在实践中我发现,扑的热重载是相当快于大量的即时运行,特别是对任何规模的应用。
此外,我发现与国家打交道的方式比Android活动的方式更适合于重新计算的类。在Flutter中,UI中涉及许多类,每个类都有各自的状态,并且只需更改其中几个即可。另外,在Android中,您倾向于具有较大的“视图”或“活动UI”,这需要花费更多的精力进行替换,并且经常导致重新加载活动,而不仅仅是在这里和那里的类。