Mobil geliştirmede Hot Restart — özü, mekanizması ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-05-18 Okuma süresi: 8 dk

Hot Restart, geliştirme sırasında bir mobil uygulamanın hızlı bir şekilde yeniden yüklenmesini sağlayan bir mekanizmadır. Uygulama, güncellenmiş kaynak koduyla tamamen yeniden başlatılır. Tam yeniden derlemeden farklı olarak, Hot Restart zaten derlenmiş ikili kodu kullanır ve yalnızca Dart VM'yi yeniden yükleyerek geliştirme döngüsü süresini kısaltır. Flutter dokümantasyonuna (2025) göre, tipik bir Hot Restart 1 ila 3 saniye sürer. Hot Restart, uygulamanın genel durumunu ve başlatma kodunu değiştirirken özellikle kullanışlıdır.

Ana Noktalar

  • Hot Restart — uygulamanın güncellenmiş kodla tamamen yeniden başlatılması, Dart VM'nin yeniden yüklenmesi ve uygulama durumunun başlangıç durumuna sıfırlanması.
  • Hot Reload — mevcut uygulama durumunu kaybetmeden değişikliklerin artımlı olarak yüklenmesi, Hot Restart'tan önemli ölçüde daha hızlı çalışır.
  • Dart VM, Hot Restart sırasında tamamen yeniden başlatılır ve başlatma ve statik değişkenler dahil tüm değişikliklerin uygulanmasını garanti eder.
  • Çalışma prensibi, değiştirilen dosyaların yeniden derlenmesini, Dart VM'nin yeniden başlatılmasını ve uygulamanın 1–3 saniye içinde yeniden başlatılmasını içerir.
  • Kullanım senaryoları — tam durum sıfırlama gerektiren genel değişkenler, yapılandırmalar, DI kapları ve başlatma kodundaki değişiklikler.

Hot Restart Nedir?

Hot Restart, projenin tamamen yeniden derlenmesine gerek kalmadan uygulamanın güncellenmiş kaynak koduyla tamamen yeniden yüklendiği bir geliştirme mekanizmasıdır. Geliştirici kodu değiştirir, dosyayı kaydeder ve IDE aracılığıyla yeniden başlatma komutu gönderir. Uygulama değiştirilen dosyaları yeniden derler, Dart VM'yi yeniden başlatır ve main'den kullanıcı arayüzünün son render'ına kadar tüm yaşam döngüsünden geçer.

Hot Restart, tam yeniden derlemeden farklı olarak, zaten derlenmiş ikili kütüphaneleri ve Flutter framework'ünü yerel sarmalayıcıları yeniden derlemeden kullanır. Bu, geliştirme döngüsü süresini birkaç dakikadan birkaç saniyeye düşürür. Bir Flutter geliştirici anketine (2024) göre, ortalama Hot Restart süresi 2,1 saniyedir ve flutter build komutuyla tam proje yeniden derlemesinden yaklaşık %97 daha hızlıdır.

Bu mekanizma, görsel değişikliklerin sık sık kontrol edilmesi gereken kullanıcı arayüzü geliştirmede özellikle talep edilir. Geliştirici bir öğenin rengini, boyutunu veya konumunu değiştirebilir ve uzun derleme nedeniyle geliştirme bağlamını kaybetmeden simülatörde veya fiziksel cihazda sonucu anında görebilir. Bu, yinelemeli prototiplemeyi önemli ölçüde hızlandırır.

Hot Restart Mekanizması Nasıl Çalışır?

Hot Restart komutu yürütüldüğünde, bir dizi işlem gerçekleşir: değiştirilen dosyaların kaydedilmesi, değiştirilen Dart dosyalarının makine koduna artımlı derlenmesi, Dart VM'nin yeniden başlatılması ve uygulama giriş noktasının yeniden yürütülmesi. Dart VM, geliştirme sırasında JIT (Just-In-Time) modunda ve üretim derlemelerinde AOT (Ahead-Of-Time) modunda Dart kodunu yürüten bir sanal makinedir.

Hot Restart Sırasında Yaşam Döngüsü

Hot Restart sırasında uygulama tam bir yaşam döngüsünden geçer: main fonksiyonunun çağrılması, WidgetsFlutterBinding'in başlatılması, runApp'in çalıştırılması ve widget ağacının sıfırdan oluşturulması. Önceki tüm widget durumları, değişkenler ve önbellekler temizlenir. Bu, uygulamanın temiz bir durumda olduğunu ve cihaza yeni kurulumdan sonraki durumla tamamen aynı olduğunu garanti eder.

Süreç bir dizi adım olarak gösterilebilir: geliştirici IDE'de Hot Restart düğmesine basar, Flutter araçları cihaza bir komut gönderir, cihaz mevcut uygulama iskeletini kaydeder, Dart VM'yi yeni kodla yeniden başlatır ve main'i yeniden çalıştırır. Bağımlılık enjeksiyon kabına kaydedilen tüm bağımlılıklar sıfırdan yeniden oluşturulur.

Temel bir özellik, yerel kabuğun (eklentiler, Kotlin kodu, Swift kodu) ikili kodunun yeniden derlenmemesidir. Hot Restart yalnızca uygulamanın Dart katmanını etkiler ve bu da yüksek yeniden başlatma hızını sağlar. Değişiklikler yerel kodu etkiliyorsa, tam bir flutter build gerekir.

Flutter'da Teknik Uygulama

Flutter, Dart kodunun Dart VM'de çalıştırıldığı ve kullanıcı arayüzünün Skia veya Impeller motoru aracılığıyla render edildiği bir mimari kullanır. Hot Restart sırasında, Flutter araçları Dart VM'nin yalıtılmış bir örneğini (isolate) yeniden başlatır, güncellenmiş .dill dosyalarını (Dart Intermediate Language) yükler ve main fonksiyonunu yeniden çalıştırır. Tüm kullanıcı arayüzü, runApp çağrısı aracılığıyla sıfırdan yeniden oluşturulur ve tüm widget'ların güncel olması sağlanır.

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

void main() {
  // Hot Restart'tan sonra bu fonksiyon tekrar çalışır
  var prefs = await SharedPreferences.getInstance();
  var themeMode = prefs.getString('theme') ?? 'light';
  runApp(MyApp(themeMode: themeMode));
}

Hot Restart vs Hot Reload: Temel Farklar

Hot Restart ve Hot Reload, sıkça karıştırılan iki hızlı geliştirme mekanizmasıdır. Hot Reload, mevcut durumu kaybetmeden çalışan uygulamaya değişiklikleri yüklerken, Hot Restart uygulamayı tamamen yeniden başlatır. Hot Reload daha hızlı çalışır (0,1–1 saniye) ancak başlatma veya statik sınıf alanlarını etkileyen değişiklikleri uygulamaz.

Uygulama Durumunun Korunması

Temel fark uygulama durumudur. Hot Reload, widget'ların mevcut durumunu korur: kaydırma konumu, girilen veriler, açık modal pencereler. Hot Restart tüm durumu başlangıç durumuna sıfırlar. Değişiklik yalnızca build yöntemindeki kodu etkiliyorsa, Hot Reload yeterlidir. Değişiklik main'i, genel değişkenleri veya bağımlılıkları etkiliyorsa, Hot Restart gerekir.

Hot Reload, isolate'i yeniden başlatmadan Dart VM'ye güncellenmiş kod enjekte ederek değişiklikleri uygular. Bu yalnızca tür yapısını bozmayan ve widget yeniden başlatması gerektirmeyen değişiklikler için mümkündür. Hot Restart sırasında, isolate tamamen yeniden başlatılır ve sınıfların ve yöntemlerin silinmesi veya yeniden adlandırılması dahil her türlü değişikliğin uygulanmasına olanak tanır.

Performans ve Senaryolar

Flutter ekibine göre, Hot Reload çoğu değişiklik için 1 saniyeden az sürerken, Hot Restart 1 ila 3 saniye sürer. Kullanıcı arayüzü değişikliklerinin yaklaşık %80'i için Hot Reload yeterlidir. Uygulama yapılandırmalarını, genel değişkenleri, Dart sarmalayıcısındaki yerel eklentileri ve mimari kararları değiştirirken Hot Restart gerekir.

Şu strateji önerilir: görsel UI düzenlemeleri ve küçük mantık değişiklikleri için Hot Reload kullanın; veri yapılarını değiştirirken, bağımlılık eklerken veya başlatma kodunu düzenlerken Hot Restart'a geçin. Bu, bekleme süresini en aza indirir ve yüksek geliştirme verimliliğini korur.

Popüler Frameworklerde Hot Restart Uygulaması

Sıcak yeniden başlatma mekanizması, framework ve programlama diline bağlı olarak farklı şekilde uygulanır. Flutter, Dart VM JIT derlemesi aracılığıyla Hot Restart'ın en olgun uygulamasını sağlarken, React Native Metro Bundler ve JavaScript Core veya Hermes aracılığıyla benzer bir mekanizma kullanır.

Flutter'da Hot Restart

Flutter'da Hot Restart, flutter run aracılığıyla uygulama başlatıldıktan sonra terminalde r komutuyla etkinleştirilir. Alternatif olarak, Android Studio, VS Code veya IntelliJ IDEA'da Hot Restart düğmesini kullanın. Hot Restart yalnızca debug modunda çalışır ve profile ve release derlemelerinde kullanılamaz. Yürütüldüğünde, Flutter araçları değiştirilen dosyaları kernel formatında yeniden derler ve cihaza gönderir.

dart
// Hot Restart'tan önce: eski sürüm
class Counter extends StatefulWidget {
  final int initialValue = 0;
  // Hot Restart'tan sonra: yeni değer yürürlüğe girecek
  // final int initialValue = 10;
}

class CounterState extends State<Counter> {
  int _count = 0;
  // Hot Reload _count'u korur, Hot Restart 0'a sıfırlar
}

Flutter'da Hot Restart'ın bir sınırlaması, hata ayıklama durumunu koruyamamasıdır. Yeniden başlatmadan sonra tüm kesme noktaları korunur, ancak hata ayıklayıcıdaki değişken değerleri sıfırlanır. Yeniden başlatmalar arasında durumu korumak için State Restoration mekanizması kullanılır.

React Native'de Hot Restart

React Native'de sıcak yeniden başlatma, bir JavaScript modül birleştiricisi olan Metro Bundler aracılığıyla uygulanır. Kod değiştiğinde, Metro değiştirilen modülleri yeniden oluşturur ve güncellenmiş paketi cihaza gönderir. React Native, React hooks kullanarak işlevsel bileşenlerin durumunu koruyan Hot Reload'un bir benzeri olan Fast Refresh'i destekler.

React Native'de tam yeniden başlatma (Reload), JavaScript motorunu ve uygulamanın tamamını yeniden yükler. Bu, Flutter'daki Hot Restart ile tamamen aynıdır. Etkinleştirmek için iOS simülatöründe Cmd+R veya Android'de R'ye iki kez basın. React Native'de tam yeniden başlatma süresi, paket boyutuna bağlı olarak 2 ila 8 saniye arasında değişir.

Geliştirmede Hot Restart Ne Zaman Kullanılır

Hot Restart, bir dizi geliştirme senaryosunda vazgeçilmez bir araçtır. İlk ve en belirgin olanı, uygulamanın genel yapılandırmasını değiştirmektir: temalar, yerelleştirme, durum sağlayıcıları. Widget ağacının kökünde bir sağlayıcıyı değiştirdiyseniz veya DI kabına yeni bir modül eklediyseniz, Hot Restart tüm bileşenlerin doğru şekilde başlatılmasını garanti eder.

İkinci senaryo, statik değişkenleri ve sabitleri değiştirmektir. Dart'ta statik alanlar, sınıf yüklendiğinde bir kez başlatılır. Hot Reload, statik alanlardaki değişiklikleri uygulamaz, bu nedenle bunları güncellemek için Hot Restart gerekir. Bu, özellikle yapılandırma sabitleri, API URL'leri ve özellik bayraklarıyla çalışırken geçerlidir.

Üçüncü senaryo, başlatma hata ayıklamasıdır: main fonksiyonunun, başlatma ekranının, bağımlılık yüklemesinin kontrolü. Her Hot Restart'ta uygulama tam bir başlatma döngüsünden geçer ve yalnızca başlatma sırasında oluşan hataların belirlenmesine olanak tanır — SharedPreferences sorunları, veritabanı bağlantı hataları, başlatma zaman aşımları.

Dördüncü senaryo, boş durum testidir. Hot Restart, uygulamanın tüm durumunu sıfırlar ve ilk başlatmadaki davranışı kontrol etmenizi sağlar: karşılama ekranının gösterilmesi, izin isteme, boş listeler ve yer tutucu ekranlar. Tekrarlanabilir testler için bu, uygulamayı yeniden yüklemekten önemli ölçüde daha hızlıdır.

Sıkça Sorulan Sorular

Hot Restart, Hot Reload'dan nasıl farklıdır?

Hot Restart, uygulamayı ve Dart VM'yi tamamen yeniden başlatarak durumu başlangıç durumuna sıfırlar. Hot Reload, çalışan uygulamaya değişiklikleri enjekte ederek mevcut UI durumunu korur. Hot Reload daha hızlıdır ancak başlatma değişiklikleri ve genel değişkenler için kullanılamaz.

Flutter'da Hot Restart nasıl yapılır?

flutter run başlatıldıktan sonra terminalde Hot Restart için R tuşuna (Shift+R) basın. Android Studio veya VS Code'da hata ayıklama panelindeki Hot Restart düğmesini kullanın. Komut yalnızca debug modunda kullanılabilir.

Hot Restart ne kadar sürer?

Tipik bir Hot Restart, orta boy projeler için 1 ila 3 saniye sürer. Süre, Dart dosyası sayısına, widget ağacının karmaşıklığına ve cihaz performansına bağlıdır. Büyük projeler için süre 5–8 saniyeye ulaşabilir.

Hot Restart release derlemesinde çalışır mı?

Hayır, Hot Restart yalnızca debug modunda kullanılabilir. Release ve profile derlemeleri, sıcak yeniden yüklemeyi desteklemeyen AOT derlemesini kullanır. Release'te kodu güncellemek için tam yeniden derleme gerekir.

Hot Restart yerel eklentilerle kullanılabilir mi?

Hot Restart, yerel kodu etkilemez — Kotlin, Swift veya Java eklentileri. Eklentinin yerel kodunda değişiklik yapılırsa, tam proje yeniden derlemesi gerekir. Hot Restart yalnızca uygulamanın Dart katmanı için etkilidir.

Özet

  • Hot Restart — uygulamayı güncellenmiş Dart koduyla tamamen yeniden başlatan ve durumu başlangıç durumuna sıfırlayan bir mekanizma.
  • Hot Reload'dan farkı — Dart VM'nin tamamen yeniden başlatılması ve genel değişkenler ve statik alanlar dahil tüm bileşenlerin yeniden başlatılması.
  • Yürütme süresi — tipik bir proje için 1–3 saniye, flutter build ile tam yeniden derlemeden %97 daha hızlı.
  • Kullanım senaryoları — genel yapılandırma, statik değişkenler, DI kapları ve başlatma kodunda değişiklik.
  • Sınırlamalar — yerel kod (Kotlin/Swift) için geçerli değil, yalnızca debug modunda kullanılabilir, hata ayıklama durumunu sıfırlar.
  • Kullanım stratejisi — UI düzenlemeleri için Hot Reload, mimari ve başlatma değişiklikleri için Hot Restart, yerel kod için tam yeniden derleme.
  • Uygulama — Flutter Dart VM JIT derlemesi kullanır, React Native Metro Bundler ve JS motoru yeniden yükleme kullanır.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun