Hot Restart is een mechanisme voor snel herladen van een mobiele applicatie tijdens het ontwikkelproces, waarbij de applicatie volledig opnieuw wordt gestart met bijgewerkte broncode. In tegenstelling tot volledige hercompilatie gebruikt Hot Restart reeds gecompileerde binaire code en herlaadt alleen de Dart VM, waardoor de ontwikkelcyclus wordt verkort. Volgens Flutter documentation (2025) duurt een typische Hot Restart 1 tot 3 seconden. Hot Restart is vooral nuttig bij het wijzigen van de globale toestand van de applicatie en initialisatiecode.
Belangrijkste punten
Hot Restart is een ontwikkelmechanisme waarbij de applicatie volledig wordt herladen met bijgewerkte broncode zonder dat het project volledig opnieuw hoeft te worden gecompileerd. De ontwikkelaar brengt wijzigingen aan in de code, slaat het bestand op en stuurt via de IDE een herstartcommando. De applicatie hercompileert gewijzigde bestanden, herstart de Dart VM en doorloopt opnieuw de volledige levenscyclus van main tot de uiteindelijke weergave van de gebruikersinterface.
Hot Restart verschilt van volledige herbouw doordat het reeds gecompileerde binaire bibliotheken en het Flutter-framework gebruikt zonder hercompilatie van native wrappers. Dit verkort de ontwikkelcyclus van enkele minuten tot enkele seconden. Volgens een enquête onder Flutter-ontwikkelaars (2024) bedraagt de gemiddelde Hot Restart-tijd 2,1 seconden, wat ongeveer 97% sneller is dan een volledige herbouw van het project via het flutter build-commando.
Het mechanisme is vooral gewild bij de ontwikkeling van gebruikersinterfaces waar frequente controle van visuele wijzigingen nodig is. De ontwikkelaar kan de kleur, grootte of positie van een element wijzigen en het resultaat onmiddellijk zien op de simulator of een fysiek apparaat, zonder de ontwikkelcontext te verliezen door lange compilatie. Dit versnelt iteratieve prototyping aanzienlijk.
Bij het uitvoeren van het Hot Restart-commando vindt een reeks bewerkingen plaats: opslaan van gewijzigde bestanden, incrementele compilatie van gewijzigde Dart-bestanden naar machinecode, herstarten van de Dart VM en opnieuw uitvoeren van het startpunt van de applicatie. Dart VM is een virtuele machine die Dart-code uitvoert in JIT-modus (Just-In-Time) tijdens ontwikkeling en AOT-modus (Ahead-Of-Time) in productiebuilds.
Bij Hot Restart doorloopt de applicatie de volledige levenscyclus: aanroep van de main-functie, initialisatie van WidgetsFlutterBinding, starten van runApp en het volledig opnieuw opbouwen van de widgetboom. Alle eerdere widgetstatussen, variabelen en caches worden gewist. Dit garandeert dat de applicatie zich in een schone staat bevindt, volledig identiek aan de staat na een schone installatie op het apparaat.
Het proces kan worden voorgesteld als een reeks stappen: de ontwikkelaar drukt op de Hot Restart-knop in de IDE, Flutter-tools sturen het commando naar het apparaat, het apparaat slaat het huidige applicatieskelet op, herstart de Dart VM met nieuwe code en start main opnieuw. Alle afhankelijkheden die zijn geregistreerd in de dependency-injectiecontainer worden opnieuw aangemaakt.
Het belangrijkste kenmerk — binaire code van de native wrapper (plugins, Kotlin-code, Swift-code) wordt niet hercompileerd. Hot Restart heeft alleen invloed op de Dart-laag van de applicatie, wat zorgt voor hoge herstartsnelheid. Als wijzigingen de native code beïnvloeden, is een volledige flutter build-uitvoering vereist.
Flutter gebruikt een architectuur waarin Dart-code wordt uitgevoerd op de Dart VM en de UI wordt weergegeven via de Skia- of Impeller-engine. Bij Hot Restart herstarten Flutter-tools de geïsoleerde instantie van de Dart VM (isolate), laden bijgewerkte .dill-bestanden (Dart Intermediate Language) en voeren de main-functie opnieuw uit. De volledige UI wordt opnieuw opgebouwd via de runApp-aanroep, wat de actualiteit van alle widgets garandeert.
import 'package:flutter/material.dart';
void main() {
// Na Hot Restart wordt deze functie opnieuw uitgevoerd
var prefs = await SharedPreferences.getInstance();
var themeMode = prefs.getString('theme') ?? 'light';
runApp(MyApp(themeMode: themeMode));
}
Hot Restart en Hot Reload zijn twee mechanismen voor versnelde ontwikkeling die vaak worden verward. Hot Reload laadt wijzigingen in de actieve applicatie zonder verlies van de huidige status, terwijl Hot Restart de applicatie volledig herstart. Hot Reload werkt sneller (0,1–1 seconde), maar past geen wijzigingen toe die de initialisatie of statische velden van een klasse beïnvloeden.
Het belangrijkste verschil — applicatiestatus. Hot Reload behoudt de huidige status van widgets: scrollpositie, ingevoerde gegevens, geopende modale vensters. Hot Restart reset de volledige status naar de beginstatus. Als de wijziging alleen betrekking heeft op code in de build-methode, is Hot Reload voldoende. Als de wijziging main, globale variabelen of afhankelijkheden betreft — is Hot Restart vereist.
Hot Reload past wijzigingen toe door bijgewerkte code in de Dart VM te injecteren zonder de isolate te herstarten. Dit is alleen mogelijk voor wijzigingen die de typestructuur niet schenden en geen herinitialisatie van widgets vereisen. Bij Hot Restart wordt de isolate volledig herstart, waardoor elke wijziging kan worden toegepast, inclusief het verwijderen of hernoemen van klassen en methoden.
Volgens het Flutter-team duurt Hot Reload minder dan 1 seconde voor de meeste wijzigingen, terwijl Hot Restart 1 tot 3 seconden duurt. Voor ongeveer 80% van de wijzigingen in de gebruikersinterface is Hot Reload voldoende. Hot Restart is nodig bij het wijzigen van applicatieconfiguraties, globale variabelen, native plugins in de Dart-wrapper en architectonische beslissingen.
De volgende strategie wordt aanbevolen: gebruik Hot Reload voor visuele aanpassingen van de UI en kleine logische wijzigingen; schakel over op Hot Restart bij het wijzigen van gegevensstructuren, het toevoegen van afhankelijkheden of het aanpassen van initialisatiecode. Dit minimaliseert de wachttijd en behoudt een hoge ontwikkelproductiviteit.
Het mechanisme voor hot restart wordt verschillend geïmplementeerd afhankelijk van het framework en de programmeertaal. Flutter biedt de meest volwassen implementatie van Hot Restart via JIT-compilatie van de Dart VM, terwijl React Native een vergelijkbaar mechanisme gebruikt via Metro Bundler en JavaScript Core of Hermes.
In Flutter wordt Hot Restart geactiveerd met het commando r in de terminal nadat de applicatie is gestart via flutter run. Als alternatief — de Hot Restart-knop in Android Studio, VS Code of IntelliJ IDEA. Hot Restart werkt alleen in debug-modus en is niet beschikbaar in profile- en release-builds. Bij uitvoering hercompileren Flutter-tools de gewijzigde bestanden naar kernel-formaat en sturen ze naar het apparaat.
// Vóór Hot Restart: oude versie
class Counter extends StatefulWidget {
final int initialValue = 0;
// Na Hot Restart: nieuwe waarde wordt van kracht
// final int initialValue = 10;
}
class CounterState extends State<Counter> {
int _count = 0;
// Hot Reload behoudt _count, Hot Restart reset naar 0
}
Beperking van Hot Restart in Flutter — het onvermogen om debug-status te behouden. Na herstart blijven alle breekpunten behouden, maar worden variabelewaarden in de debugger gereset. Voor het behouden van status tussen herstarts worden State Restoration-mechanismen voor het opslaan van applicatiestatus gebruikt.
In React Native wordt hot restart geïmplementeerd via Metro Bundler — de JavaScript-modulebundelaar. Bij codewijzigingen herbouwt Metro de gewijzigde modules en stuurt de bijgewerkte bundle naar het apparaat. React Native ondersteunt Fast Refresh — een analogon van Hot Reload dat de status van functionele componenten behoudt met behulp van React hooks.
Volledige herstart (Reload) in React Native herlaadt de JavaScript-engine en de volledige applicatie in zijn geheel. Dit is volledig analoog aan Hot Restart in Flutter. Voor het starten wordt de combinatie Cmd+R gebruikt op de iOS-simulator of dubbel tikken op R op Android. De tijd voor een volledige herstart in React Native varieert van 2 tot 8 seconden, afhankelijk van de bundelgrootte.
Hot Restart is een onmisbaar hulpmiddel in een aantal ontwikkelingsscenario's. De eerste en meest voor de hand liggende — het wijzigen van de globale configuratie van de applicatie: ontwerpthema's, lokalisatie, statusproviders. Als u de provider in de root van de widgetboom hebt gewijzigd of een nieuwe module aan de DI-container hebt toegevoegd, garandeert Hot Restart een correcte initialisatie van alle componenten.
Het tweede scenario — het wijzigen van statische variabelen en constanten. In Dart worden statische velden één keer geïnitialiseerd bij het laden van de klasse. Hot Reload past wijzigingen in statische velden niet toe, dus voor het bijwerken ervan is Hot Restart verplicht. Dit is vooral relevant bij het werken met configuratieconstanten, API-URL's en functievlaggen.
Het derde scenario — debuggen van initialisatie: controle van de main-functie, het splash-scherm, het laden van afhankelijkheden. Bij elke Hot Restart doorloopt de applicatie de volledige initialisatiecyclus, waardoor fouten kunnen worden opgespoord die alleen bij het opstarten optreden — problemen met SharedPreferences, verbindingsfouten met de database, initialisatietime-outs.
Het vierde scenario — testen van lege status. Hot Restart reset de volledige applicatiestatus, waardoor het gedrag bij de eerste start kan worden gecontroleerd: weergave van onboarding, toestemmingsverzoeken, lege lijsten en placeholders. Voor herhaalbare tests is dit aanzienlijk sneller dan de applicatie opnieuw te installeren.
Veelgestelde vragen
Hot Restart herstart de applicatie en Dart VM volledig, waarbij de status wordt teruggezet naar de beginstatus. Hot Reload injecteert wijzigingen in de actieve applicatie en behoudt de huidige UI-status. Hot Reload is sneller, maar niet toepasbaar voor wijzigingen in initialisatie en globale variabelen.
Druk in de terminal na het starten van flutter run op de toets R (Shift+R) voor Hot Restart. Gebruik in Android Studio of VS Code de Hot Restart-knop op het foutopsporingspaneel. Het commando is alleen beschikbaar in debug-modus.
De typische Hot Restart-tijd is 1 tot 3 seconden voor projecten van gemiddelde omvang. De tijd is afhankelijk van het aantal Dart-bestanden, de complexiteit van de widgetboom en de prestaties van het apparaat. Voor grote projecten kan de tijd oplopen tot 5–8 seconden.
Nee, Hot Restart is alleen beschikbaar in debug-modus. In release- en profile-builds wordt AOT-compilatie gebruikt, die geen hot reload ondersteunt. Voor het bijwerken van code in release is een volledige herbouw vereist.
Hot Restart heeft geen invloed op native code — Kotlin-, Swift- of Java-plugins. Als wijzigingen worden aangebracht in de native code van de plugin, is een volledige herbouw van het project vereist. Hot Restart is alleen effectief voor de Dart-laag van de applicatie.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook