Hot Restart v mobilním vývoji — podstata, mechanismus a princip fungování

Autor: IT Sectr Publikováno: 2026-05-18 Doba čtení: 8 min

Hot Restart je mechanismus rychlého znovunačtení mobilní aplikace během vývoje, při kterém je aplikace zcela restartována s aktualizovaným zdrojovým kódem. Na rozdíl od úplné rekompilace Hot Restart využívá již zkompilovaný binární kód a znovu načítá pouze Dart VM, čímž zkracuje dobu vývojového cyklu. Podle Flutter documentation (2025) typický Hot Restart trvá 1 až 3 sekundy. Hot Restart je užitečný zejména při změně globálního stavu aplikace a inicializačního kódu.

Hlavní body

  • Hot Restart — úplný restart aplikace s aktualizovaným kódem, při kterém se Dart VM znovu načte a stav aplikace se resetuje do počátečního stavu.
  • Hot Reload — přírůstkové načítání změn bez ztráty aktuálního stavu aplikace, funguje výrazně rychleji než Hot Restart.
  • Dart VM se při Hot Restart zcela restartuje, což zaručuje aplikaci všech změn včetně inicializace a statických proměnných.
  • Princip fungování zahrnuje rekompilaci změněných souborů, restart Dart VM a opětovnou inicializaci aplikace během 1–3 sekund.
  • Scénáře použití — změny globálních proměnných, konfigurací, DI kontejnerů a inicializačního kódu vyžadující úplný reset stavu.

Co je Hot Restart?

Hot Restart je vývojový mechanismus, při kterém je aplikace zcela znovu načtena s aktualizovaným zdrojovým kódem bez nutnosti úplné rekompilace projektu. Vývojář provede změny v kódu, uloží soubor a přes IDE odešle příkaz k restartu. Aplikace rekompiluje změněné soubory, restartuje Dart VM a znovu projde celým životním cyklem od main až po konečné vykreslení uživatelského rozhraní.

Hot Restart se liší od úplného přestavění tím, že využívá již zkompilované binární knihovny a framework Flutter bez rekompilace nativních obalů. Tím se zkracuje doba vývojového cyklu z několika minut na několik sekund. Podle průzkumu mezi Flutter vývojáři (2024) je průměrná doba Hot Restart 2,1 sekundy, což je přibližně o 97 % rychlejší než úplné přestavění projektu příkazem flutter build.

Mechanismus je velmi žádaný při vývoji uživatelských rozhraní, kde je vyžadována častá kontrola vizuálních změn. Vývojář může změnit barvu, velikost nebo pozici prvku a okamžitě vidět výsledek na simulátoru nebo fyzickém zařízení, aniž by ztratil kontext vývoje kvůli dlouhé kompilaci. To radikálně urychluje iterativní prototypování.

Jak funguje mechanismus Hot Restart?

Při provádění příkazu Hot Restart probíhá sekvence operací: uložení změněných souborů, přírůstková kompilace změněných Dart souborů do strojového kódu, restart Dart VM a opětovné provedení vstupního bodu aplikace. Dart VM je virtuální stroj, který spouští Dart kód v režimu JIT (Just-In-Time) během vývoje a AOT (Ahead-Of-Time) v produkčních sestaveních.

Životní cyklus při Hot Restart

Při Hot Restart aplikace prochází celým životním cyklem: volání funkce main, inicializace WidgetsFlutterBinding, spuštění runApp a vybudování celého widget stromu od nuly. Všechny předchozí stavy widgetů, proměnné a mezipaměti jsou vymazány. To zaručuje, že aplikace je v čistém stavu, zcela identickém se stavem po čerstvé instalaci na zařízení.

Proces lze znázornit jako posloupnost kroků: vývojář stiskne tlačítko Hot Restart v IDE, nástroje Flutter odešlou příkaz do zařízení, zařízení uloží aktuální kostru aplikace, restartuje Dart VM s novým kódem a znovu spustí main. Všechny závislosti registrované v kontejneru pro vkládání závislostí jsou vytvořeny od nuly.

Klíčová vlastnost — binární kód nativního obalu (pluginy, Kotlin kód, Swift kód) se nerekompiluje. Hot Restart ovlivňuje pouze Dart vrstvu aplikace, což zajišťuje vysokou rychlost restartu. Pokud změny ovlivňují nativní kód, je vyžadováno úplné spuštění flutter build.

Technická implementace ve Flutter

Flutter používá architekturu, ve které je Dart kód spouštěn na Dart VM a UI je vykreslováno pomocí enginu Skia nebo Impeller. Při Hot Restart nástroje Flutter restartují izolovanou instanci Dart VM (isolate), načtou aktualizované .dill soubory (Dart Intermediate Language) a znovu spustí funkci main. Celé UI je znovu vybudováno voláním runApp, což zaručuje aktuálnost všech widgetů.

dart
import 'package:flutter/material.dart';

void main() {
  // Po Hot Restart se tato funkce provede znovu
  var prefs = await SharedPreferences.getInstance();
  var themeMode = prefs.getString('theme') ?? 'light';
  runApp(MyApp(themeMode: themeMode));
}

Hot Restart vs Hot Reload: klíčové rozdíly

Hot Restart a Hot Reload jsou dva mechanismy zrychleného vývoje, které jsou často zaměňovány. Hot Reload načítá změny do běžící aplikace bez ztráty aktuálního stavu, zatímco Hot Restart aplikaci zcela restartuje. Hot Reload funguje rychleji (0,1–1 sekunda), ale neaplikuje změny ovlivňující inicializaci nebo statická pole třídy.

Uchování stavu aplikace

Hlavní rozdíl — stav aplikace. Hot Reload uchovává aktuální stav widgetů: pozici posouvání, zadaná data, otevřená modální okna. Hot Restart resetuje celý stav do počátečního. Pokud se změna týká pouze kódu v metodě build, stačí Hot Reload. Pokud změna ovlivňuje main, globální proměnné nebo závislosti — je vyžadován Hot Restart.

Hot Reload aplikuje změny injektováním aktualizovaného kódu do Dart VM bez restartování isolate. To je možné pouze pro změny, které nenarušují strukturu typů a nevyžadují opětovnou inicializaci widgetů. Při Hot Restart je isolate zcela restartován, což umožňuje aplikovat jakékoli změny, včetně odstranění nebo přejmenování tříd a metod.

Výkon a scénáře

Podle týmu Flutter trvá Hot Reload u většiny změn méně než 1 sekundu, zatímco Hot Restart trvá 1 až 3 sekundy. Přibližně u 80 % změn uživatelského rozhraní stačí Hot Reload. Hot Restart je vyžadován při změně konfigurací aplikace, globálních proměnných, nativních pluginů v Dart obalu a architektonických rozhodnutí.

Doporučuje se následující strategie: používejte Hot Reload pro vizuální úpravy UI a malé změny logiky; přepněte na Hot Restart při změně datové struktury, přidávání závislostí nebo opravě inicializačního kódu. To minimalizuje čekací dobu a udržuje produktivitu vývoje na vysoké úrovni.

Implementace Hot Restart v populárních frameworkách

Mechanismus hot restart je implementován různě v závislosti na frameworku a programovacím jazyce. Flutter poskytuje nejvyspělejší implementaci Hot Restart prostřednictvím JIT kompilace Dart VM, zatímco React Native používá podobný mechanismus prostřednictvím Metro Bundler a JavaScript Core nebo Hermes.

Hot Restart ve Flutter

Ve Flutter se Hot Restart aktivuje příkazem r v terminálu po spuštění aplikace přes flutter run. Alternativně — tlačítko Hot Restart v Android Studio, VS Code nebo IntelliJ IDEA. Hot Restart funguje pouze v režimu debug a není k dispozici v profile a release sestaveních. Při provádění nástroje Flutter rekompilují změněné soubory do formátu kernel a odešlou je do zařízení.

dart
// Před Hot Restart: stará verze
class Counter extends StatefulWidget {
  final int initialValue = 0;
  // Po Hot Restart: nová hodnota vstoupí v platnost
  // final int initialValue = 10;
}

class CounterState extends State<Counter> {
  int _count = 0;
  // Hot Reload zachová _count, Hot Restart resetuje na 0
}

Omezení Hot Restart ve Flutter — nemožnost uchování debug stavu. Po restartu jsou všechny body přerušení zachovány, ale hodnoty proměnných v ladicím nástroji jsou resetovány. Pro uchování stavu mezi restarty se používají mechanismy ukládání stavu aplikace State Restoration.

Hot Restart v React Native

V React Native je hot restart implementován prostřednictvím Metro Bundler — nástroje pro sestavování JavaScript modulů. Při změně kódu Metro znovu sestaví změněné moduly a odešle aktualizovaný bundle do zařízení. React Native podporuje Fast Refresh — analog Hot Reload, který uchovává stav funkčních komponent pomocí React hooks.

Úplný restart (Reload) v React Native znovu načte JavaScript engine a celou aplikaci jako celek. To je plně analogické Hot Restart ve Flutter. Pro spuštění se používá kombinace Cmd+R na iOS simulátoru nebo dvojité stisknutí R na Androidu. Doba úplného restartu v React Native se pohybuje od 2 do 8 sekund v závislosti na velikosti bundle.

Kdy použít Hot Restart ve vývoji

Hot Restart je nepostradatelný nástroj v řadě scénářů vývoje. První a nejzřejmější — změna globální konfigurace aplikace: designových motivů, lokalizace, poskytovatelů stavu. Pokud jste změnili poskytovatele v kořeni widget stromu nebo přidali nový modul do DI kontejneru, Hot Restart zaručuje správnou inicializaci všech komponent.

Druhý scénář — změna statických proměnných a konstant. V Dart jsou statická pole inicializována jednou při načtení třídy. Hot Reload neaplikuje změny statických polí, proto je pro jejich aktualizaci vyžadován Hot Restart. To je důležité zejména při práci s konfiguračními konstantami, URL adresami API a příznaky funkcí.

Třetí scénář — ladění inicializace: kontrola funkce main, úvodní obrazovky, načítání závislostí. Při každém Hot Restart aplikace prochází celým inicializačním cyklem, což umožňuje odhalit chyby, které se vyskytují pouze při spuštění — problémy s SharedPreferences, chyby připojení k databázi, časové limity inicializace.

Čtvrtý scénář — testování prázdného stavu. Hot Restart resetuje celý stav aplikace, což umožňuje zkontrolovat chování při prvním spuštění: zobrazení onboardingu, žádosti o oprávnění, prázdné seznamy a zástupné symboly. Pro opakované testování je to výrazně rychlejší než přeinstalace aplikace.

Často kladené otázky

Čím se Hot Restart liší od Hot Reload?

Hot Restart zcela restartuje aplikaci a Dart VM, resetuje stav do počátečního. Hot Reload injektuje změny do běžící aplikace a uchovává aktuální stav UI. Hot Reload je rychlejší, ale není použitelný pro změny inicializace a globálních proměnných.

Jak provést Hot Restart ve Flutter?

V terminálu po spuštění flutter run stiskněte klávesu R (Shift+R) pro Hot Restart. V Android Studio nebo VS Code použijte tlačítko Hot Restart na panelu ladění. Příkaz je dostupný pouze v režimu debug.

Jak dlouho trvá Hot Restart?

Typická doba Hot Restart je 1 až 3 sekundy pro projekty střední velikosti. Doba závisí na počtu Dart souborů, složitosti widget stromu a výkonu zařízení. U velkých projektů může doba dosáhnout 5–8 sekund.

Funguje Hot Restart v release sestavení?

Ne, Hot Restart je dostupný pouze v režimu debug. V release a profile sestaveních se používá AOT kompilace, která nepodporuje hot reload. Pro aktualizaci kódu v release je vyžadováno úplné přestavění.

Lze použít Hot Restart s nativními pluginy?

Hot Restart neovlivňuje nativní kód — Kotlin, Swift nebo Java pluginy. Pokud jsou změny prováděny v nativním kódu pluginu, je vyžadováno úplné přestavění projektu. Hot Restart je účinný pouze pro Dart vrstvu aplikace.

Shrnutí

  • Hot Restart — mechanismus úplného restartu aplikace s aktualizovaným Dart kódem, resetuje stav do počátečního.
  • Rozdíl od Hot Reload — úplný restart Dart VM a opětovná inicializace všech komponent včetně globálních proměnných a statických polí.
  • Doba provedení — 1–3 sekundy pro typický projekt, o 97 % rychlejší než úplné přestavění přes flutter build.
  • Scénáře použití — změna globální konfigurace, statických proměnných, DI kontejnerů a inicializačního kódu.
  • Omezení — neaplikuje se na nativní kód (Kotlin/Swift), dostupný pouze v režimu debug, resetuje debug stav.
  • Strategie použití — Hot Reload pro UI úpravy, Hot Restart pro změny architektury a inicializace, úplné přestavění pro nativní kód.
  • Implementace — Flutter používá JIT kompilaci Dart VM, React Native — Metro Bundler s opětovným načtením JS enginu.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také