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, 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 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 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, 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.
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 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.
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.
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.
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 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.
// 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 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.
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, 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 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.
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.
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 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
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.
Ayrıca okuyun