Hot Restart in mobiele ontwikkeling — essentie, mechanisme en werkingsprincipe

Auteur: IT Sectr Gepubliceerd: 2026-05-18 Leestijd: 8 min

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 — volledige herstart van de applicatie met bijgewerkte code, waarbij de Dart VM opnieuw wordt geladen en de applicatiestatus wordt teruggezet naar de beginstatus.
  • Hot Reload — incrementeel laden van wijzigingen zonder verlies van de huidige applicatiestatus, werkt aanzienlijk sneller dan Hot Restart.
  • Dart VM wordt bij Hot Restart volledig herstart, wat de toepassing van alle wijzigingen garandeert, inclusief initialisatie en statische variabelen.
  • Werkingsprincipe omvat hercompilatie van gewijzigde bestanden, herstart van Dart VM en herinitialisatie van de applicatie binnen 1–3 seconden.
  • Toepassingsscenario's — wijzigingen van globale variabelen, configuraties, DI-containers en initialisatiecode die volledige reset van de status vereisen.

Wat is Hot Restart?

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.

Hoe werkt het Hot Restart-mechanisme?

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.

Levenscyclus bij Hot Restart

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.

Technische implementatie in Flutter

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.

dart
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 vs Hot Reload: belangrijkste verschillen

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.

Status van de applicatie behouden

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.

Prestaties en scenario's

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.

Implementatie van Hot Restart in populaire frameworks

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.

Hot Restart in Flutter

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.

dart
// 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.

Hot Restart in React Native

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.

Wanneer Hot Restart toepassen in ontwikkeling

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

Wat is het verschil tussen Hot Restart en Hot Reload?

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.

Hoe voer ik Hot Restart uit in Flutter?

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.

Hoe lang duurt Hot Restart?

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.

Werkt Hot Restart in een release-build?

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.

Kan Hot Restart worden gebruikt met native plugins?

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

  • Hot Restart — mechanisme voor volledige herstart van de applicatie met bijgewerkte Dart-code, reset van status naar beginstatus.
  • Verschil met Hot Reload — volledige herstart van Dart VM en herinitialisatie van alle componenten, inclusief globale variabelen en statische velden.
  • Uitvoeringstijd — 1–3 seconden voor een typisch project, 97% sneller dan volledige herbouw via flutter build.
  • Toepassingsscenario's — wijziging van globale configuratie, statische variabelen, DI-containers en initialisatiecode.
  • Beperkingen — niet van toepassing op native code (Kotlin/Swift), alleen beschikbaar in debug-modus, reset debug-status.
  • Gebruiksstrategie — Hot Reload voor UI-aanpassingen, Hot Restart voor architectuur- en initialisatiewijzigingen, volledige herbouw voor native code.
  • Implementatie — Flutter gebruikt JIT-compilatie van Dart VM, React Native — Metro Bundler met herladen van de JS-engine.

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.

Bespreek het project

Lees ook