Hot Restart a mobilfejlesztésben — lényeg, mechanizmus és működési elv

Szerző: IT Sectr Megjelenés: 2026-05-18 Olvasási idő: 8 perc

A Hot Restart a mobilalkalmazás gyors újratöltésének mechanizmusa a fejlesztési folyamat során, amely során az alkalmazás teljesen újraindul a frissített forráskóddal. A teljes újrafordítással ellentétben a Hot Restart a már lefordított bináris kódot használja, és csak a Dart VM-et tölti újra, lerövidítve a fejlesztési ciklus idejét. A Flutter documentation (2025) szerint egy tipikus Hot Restart 1–3 másodpercig tart. A Hot Restart különösen hasznos az alkalmazás globális állapotának és inicializálási kódjának módosításakor.

Főbb pontok

  • Hot Restart — az alkalmazás teljes újraindítása frissített kóddal, amely során a Dart VM újratöltődik, az alkalmazás állapota pedig a kezdeti állapotba kerül vissza.
  • Hot Reload — a változtatások növekményes betöltése az alkalmazás aktuális állapotának elvesztése nélkül, jelentősen gyorsabb, mint a Hot Restart.
  • Dart VM a Hot Restart során teljesen újraindul, ami garantálja az összes változtatás alkalmazását, beleértve az inicializálást és a statikus változókat.
  • Működési elv magában foglalja a módosított fájlok újrafordítását, a Dart VM újraindítását és az alkalmazás újbóli inicializálását 1–3 másodperc alatt.
  • Alkalmazási forgatókönyvek — a globális változók, konfigurációk, DI-konténerek és inicializálási kód módosításai, amelyek az állapot teljes visszaállítását igénylik.

Mi az a Hot Restart?

Hot Restart egy fejlesztési mechanizmus, amely során az alkalmazás teljesen újratöltődik a frissített forráskóddal anélkül, hogy a projektet teljesen újra kellene fordítani. A fejlesztő módosításokat végez a kódban, elmenti a fájlt, és az IDE-n keresztül újraindítási parancsot küld. Az alkalmazás újrafordítja a módosított fájlokat, újraindítja a Dart VM-et, és újra végigjárja a teljes életciklust a main-től a felhasználói felület végső megjelenítéséig.

A Hot Restart abban különbözik a teljes újraépítéstől, hogy a már lefordított bináris könyvtárakat és a Flutter keretrendszert használja a natív burkolók újrafordítása nélkül. Ez a fejlesztési ciklus idejét néhány percről néhány másodpercre csökkenti. A Flutter-fejlesztők körében végzett felmérés (2024) szerint a Hot Restart átlagos ideje 2,1 másodperc, ami körülbelül 97%-kal gyorsabb, mint a projekt teljes újraépítése a flutter build paranccsal.

A mechanizmus különösen keresett a felhasználói felületek fejlesztésénél, ahol gyakori vizuális változtatások ellenőrzése szükséges. A fejlesztő megváltoztathatja egy elem színét, méretét vagy pozícióját, és azonnal láthatja az eredményt a szimulátoron vagy fizikai eszközön anélkül, hogy a fejlesztési kontextust elveszítené a hosszú fordítás miatt. Ez radikálisan felgyorsítja az iteratív prototípuskészítést.

Hogyan működik a Hot Restart mechanizmusa?

A Hot Restart parancs végrehajtásakor műveletek sorozata történik: a módosított fájlok mentése, a módosított Dart fájlok növekményes fordítása gépi kódra, a Dart VM újraindítása és az alkalmazás belépési pontjának újbóli végrehajtása. A Dart VM egy virtuális gép, amely a Dart kódot JIT (Just-In-Time) módban hajtja végre fejlesztés közben, és AOT (Ahead-Of-Time) módban éles build-ekben.

Életciklus a Hot Restart során

A Hot Restart során az alkalmazás a teljes életcikluson megy keresztül: a main függvény meghívása, a WidgetsFlutterBinding inicializálása, a runApp elindítása és a teljes widget-fa felépítése a semmiből. Az összes korábbi widget-állapot, változó és gyorsítótár törlődik. Ez garantálja, hogy az alkalmazás tiszta állapotban van, teljesen megegyezve az eszközre történt friss telepítés utáni állapottal.

A folyamat lépések sorozataként ábrázolható: a fejlesztő megnyomja a Hot Restart gombot az IDE-ben, a Flutter eszközök elküldik a parancsot az eszközre, az eszköz elmenti az aktuális alkalmazásvázat, újraindítja a Dart VM-et az új kóddal, és újra elindítja a main-t. A függőséginjektáló konténerben regisztrált összes függőség a semmiből jön létre.

A legfontosabb jellemző — a natív burkoló (bővítmények, Kotlin-kód, Swift-kód) bináris kódja nem fordul újra. A Hot Restart csak az alkalmazás Dart rétegét érinti, ami biztosítja a nagy újraindítási sebességet. Ha a változtatások a natív kódot érintik, teljes flutter build végrehajtása szükséges.

Technikai megvalósítás a Flutter-ben

A Flutter olyan architektúrát használ, amelyben a Dart kód a Dart VM-en fut, a UI pedig a Skia vagy Impeller motoron keresztül jelenik meg. A Hot Restart során a Flutter eszközök újraindítják a Dart VM elkülönített példányát (isolate), betöltik a frissített .dill fájlokat (Dart Intermediate Language), és újra végrehajtják a main függvényt. A teljes UI a runApp híváson keresztül épül fel újra, ami garantálja az összes widget naprakészségét.

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

void main() {
  // Hot Restart után ez a függvény újra végrehajtódik
  var prefs = await SharedPreferences.getInstance();
  var themeMode = prefs.getString('theme') ?? 'light';
  runApp(MyApp(themeMode: themeMode));
}

Hot Restart vs Hot Reload: legfontosabb különbségek

A Hot Restart és a Hot Reload két gyorsított fejlesztési mechanizmus, amelyeket gyakran összekevernek. A Hot Reload a változtatásokat a futó alkalmazásba tölti be az aktuális állapot elvesztése nélkül, míg a Hot Restart teljesen újraindítja az alkalmazást. A Hot Reload gyorsabban működik (0,1–1 másodperc), de nem alkalmazza az inicializálást vagy az osztály statikus mezőit érintő változtatásokat.

Az alkalmazás állapotának megőrzése

A fő különbség — az alkalmazás állapota. A Hot Reload megőrzi a widgetek aktuális állapotát: görgetési pozíció, beírt adatok, nyitott modális ablakok. A Hot Restart a teljes állapotot a kezdeti állapotba állítja vissza. Ha a változtatás csak a build metódusban lévő kódot érinti, elegendő a Hot Reload. Ha a változtatás a main-t, globális változókat vagy függőségeket érint — Hot Restart szükséges.

A Hot Reload a változtatásokat a frissített kód Dart VM-be történő injektálásával alkalmazza az isolate újraindítása nélkül. Ez csak olyan változtatásoknál lehetséges, amelyek nem sértik a típusok szerkezetét és nem igényelnek a widgetek újrainicializálását. A Hot Restart során az isolate teljesen újraindul, ami lehetővé teszi bármilyen változtatás alkalmazását, beleértve az osztályok és metódusok törlését vagy átnevezését.

Teljesítmény és forgatókönyvek

A Flutter csapat szerint a Hot Reload a legtöbb változtatásnál kevesebb mint 1 másodpercig tart, míg a Hot Restart 1–3 másodpercig. A felhasználói felület változtatásainak körülbelül 80%-ához elegendő a Hot Reload. Hot Restart szükséges az alkalmazáskonfigurációk, globális változók, natív bővítmények a Dart burkolóban és architekturális döntések módosításakor.

Az alábbi stratégia javasolt: használja a Hot Reload-ot a UI vizuális javításaihoz és kisebb logikai változtatásokhoz; váltson Hot Restart-ra az adatszerkezet módosításakor, függőségek hozzáadásakor vagy az inicializálási kód javításakor. Ez minimalizálja a várakozási időt és magas szinten tartja a fejlesztési termelékenységet.

A Hot Restart megvalósítása népszerű keretrendszerekben

A hot restart mechanizmusa eltérően van megvalósítva a keretrendszertől és a programozási nyelvtől függően. A Flutter a Dart VM JIT-fordításán keresztül nyújtja a Hot Restart legérettebb megvalósítását, míg a React Native hasonló mechanizmust használ a Metro Bundler és a JavaScript Core vagy Hermes segítségével.

Hot Restart a Flutter-ben

A Flutter-ben a Hot Restart az r paranccsal aktiválható a terminálban az alkalmazás flutter run-on keresztüli elindítása után. Alternatívaként — a Hot Restart gomb az Android Studio, VS Code vagy IntelliJ IDEA alkalmazásban. A Hot Restart csak debug módban működik, és nem elérhető profile és release build-ekben. Végrehajtáskor a Flutter eszközök a módosított fájlokat kernel formátumba fordítják újra, és elküldik az eszközre.

dart
// Hot Restart előtt: régi verzió
class Counter extends StatefulWidget {
  final int initialValue = 0;
  // Hot Restart után: az új érték életbe lép
  // final int initialValue = 10;
}

class CounterState extends State<Counter> {
  int _count = 0;
  // Hot Reload megőrzi a _count-ot, Hot Restart visszaállítja 0-ra
}

A Hot Restart korlátja a Flutter-ben — a debug állapot megőrzésének képtelensége. Újraindítás után az összes töréspont megmarad, de a változók értékei a hibakeresőben visszaállnak. Az újraindítások közötti állapot megőrzéséhez az alkalmazásállapot mentésének State Restoration mechanizmusait használják.

Hot Restart a React Native-ben

A React Native-ben a hot restart a Metro Bundler — a JavaScript-modulok összefűzője — segítségével van megvalósítva. A kód változásakor a Metro újraépíti a módosított modulokat, és elküldi a frissített bundle-t az eszközre. A React Native támogatja a Fast Refresh-et — a Hot Reload analógiáját, amely megőrzi a funkciós komponensek állapotát a React hooks segítségével.

A teljes újraindítás (Reload) a React Native-ben újratölti a JavaScript motort és a teljes alkalmazást egészében. Ez teljes mértékben analóg a Flutter-beli Hot Restart-tal. Az elindításhoz a Cmd+R kombinációt használják iOS szimulátoron vagy az R dupla megnyomását Androidon. A teljes újraindítás ideje a React Native-ben 2–8 másodperc között változik a bundle méretétől függően.

Mikor alkalmazzuk a Hot Restart-ot a fejlesztésben

A Hot Restart nélkülözhetetlen eszköz számos fejlesztési forgatókönyvben. Az első és legnyilvánvalóbb — az alkalmazás globális konfigurációjának módosítása: dizájntémák, lokalizáció, állapotszolgáltatók. Ha megváltoztatta a szolgáltatót a widget-fa gyökerében, vagy új modult adott a DI-konténerhez, a Hot Restart garantálja az összes komponens helyes inicializálását.

A második forgatókönyv — a statikus változók és konstansok módosítása. A Dart-ben a statikus mezők egyszer inicializálódnak az osztály betöltésekor. A Hot Reload nem alkalmazza a statikus mezők változtatásait, ezért azok frissítéséhez kötelező a Hot Restart. Ez különösen fontos konfigurációs konstansok, API URL-ek és funkciójelzők használatakor.

A harmadik forgatókönyv — az inicializálás hibakeresése: a main függvény, a splash képernyő, a függőségek betöltésének ellenőrzése. Minden Hot Restart során az alkalmazás a teljes inicializálási cikluson megy keresztül, ami lehetővé teszi az induláskor fellépő hibák felderítését — SharedPreferences problémák, adatbázis-kapcsolódási hibák, inicializálási időtúllépések.

A negyedik forgatókönyv — az üres állapot tesztelése. A Hot Restart visszaállítja az alkalmazás teljes állapotát, ami lehetővé teszi az első indításkori viselkedés ellenőrzését: az onboarding megjelenítése, engedélykérések, üres listák és helykitöltők. Ismételt teszteléshez ez lényegesen gyorsabb, mint az alkalmazás újratelepítése.

Gyakran ismételt kérdések

Miben különbözik a Hot Restart a Hot Reload-tól?

A Hot Restart teljesen újraindítja az alkalmazást és a Dart VM-et, visszaállítva az állapotot a kezdetire. A Hot Reload változtatásokat injektál a futó alkalmazásba, megőrizve az aktuális UI állapotot. A Hot Reload gyorsabb, de nem alkalmazható az inicializálás és a globális változók változtatásaira.

Hogyan hajtható végre a Hot Restart a Flutter-ben?

A terminálban a flutter run elindítása után nyomja meg az R (Shift+R) billentyűt a Hot Restart-hoz. Az Android Studio vagy VS Code alkalmazásban használja a Hot Restart gombot a hibakereső panelen. A parancs csak debug módban érhető el.

Mennyi ideig tart a Hot Restart?

A tipikus Hot Restart idő 1–3 másodperc közepes méretű projekteknél. Az idő függ a Dart fájlok számától, a widget-fa összetettségétől és az eszköz teljesítményétől. Nagy projekteknél az idő elérheti az 5–8 másodpercet.

Működik a Hot Restart release build-ben?

Nem, a Hot Restart csak debug módban érhető el. A release és profile build-ekben AOT fordítást használnak, amely nem támogatja a hot reload-ot. A kód release-ben történő frissítéséhez teljes újraépítés szükséges.

Használható a Hot Restart natív bővítményekkel?

A Hot Restart nem érinti a natív kódot — a Kotlin, Swift vagy Java bővítményeket. Ha a változtatások a bővítmény natív kódjában történnek, a projekt teljes újraépítése szükséges. A Hot Restart csak az alkalmazás Dart rétegére hatékony.

Összefoglalás

  • Hot Restart — az alkalmazás teljes újraindításának mechanizmusa frissített Dart kóddal, az állapot visszaállítása a kezdetire.
  • Különbség a Hot Reload-tól — a Dart VM teljes újraindítása és az összes komponens újrainicializálása, beleértve a globális változókat és statikus mezőket.
  • Végrehajtási idő — 1–3 másodperc egy tipikus projektnél, 97%-kal gyorsabb, mint a teljes újraépítés flutter build segítségével.
  • Alkalmazási forgatókönyvek — a globális konfiguráció, statikus változók, DI-konténerek és inicializálási kód módosítása.
  • Korlátok — nem alkalmazható natív kódra (Kotlin/Swift), csak debug módban érhető el, visszaállítja a debug állapotot.
  • Használati stratégia — Hot Reload a UI javításokhoz, Hot Restart az architektúra és inicializálás változtatásaihoz, teljes újraépítés a natív kódhoz.
  • Megvalósítás — a Flutter a Dart VM JIT fordítását használja, a React Native — a Metro Bundlert a JS motor újratöltésével.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is