Hot reload
- 変更したコードをVM(Virtual Machine)にロードして、Widget Treeを再構築(リビルド)する。
- UIのみ更新する。ログイン状態やNavigationの階層などアプリの状態は保持。
- main()やinitState()は実行されない。
- 例外を除き、ルートWidgetのbuild()より下流の変更には対応している。
Hot reloadが効かない例
- グローバル変数やstaticフィールドの変更(constは可)
- アプリのプロセスが終了している場合
- コンパイルエラーが起きている場合
- フォントの変更(フォント以外のassetsの変更にはほとんど対応)
- Kotlin, Java, Swift, or Objective-Cなど、ネイティブコードの変更
Hot restart
- コードの変更をVMにロードしてアプリをリスタートする。
- アプリの状態は破棄される。
- ネイティブコード(Kotlin, Java, Swift, or Objective-Cなど)の変更にはFull restartが必要
Full restart
- iOS, Andoid, Webのアプリがリスタートする。
- Java / Kotlin / ObjC / Swiftのコードをコンパイルし直すため、時間がかかる。
- Webでは、dartdevc(Chromeでアプリをデバックするためのツール)もリスタートされる。
基礎的なことが無知すぎた...
面接の技術的な質問で、Hot reloadとHot restartの違いついて、うまく答えられず、浅学さを思い知らされました。開発をしているだけでは不十分なことには気づけたので、とりあえず、Hot reolad, Hot restart, Full restartについて記録しました。
#####参考
https://docs.flutter.dev/development/tools/hot-reload
https://dart.dev/tools/dartdevc