İsti yenidən başlatma (Hot Restart) — tətbiqin tamamilə yenilənmiş mənbə kodu ilə yenidən başladıldığı, inkişaf prosesi zamanı mobil tətbiqin sürətli yenidən yüklənmə mexanizmidir. Tam yenidən kompilyasiyadan fərqli olaraq, Hot Restart artıq kompilyasiya edilmiş binar koddan istifadə edir və yalnız Dart VM-i yenidən yükləyir, inkişaf dövrü vaxtını qısaldır. Flutter documentation (2025) məlumatına görə, tipik Hot Restart 1–3 saniyə çəkir. Hot Restart xüsusilə tətbiqin qlobal vəziyyətinin və inisializasiya kodunun dəyişdirilməsi zamanı faydalıdır.
Əsas məqamlar
İsti yenidən başlatma (Hot Restart) — layihənin tam yenidən kompilyasiyasına ehtiyac olmadan tətbiqin yenilənmiş mənbə kodu ilə tamamilə yenidən yükləndiyi inkişaf mexanizmidir. Proqramçı koda dəyişikliklər edir, faylı yaddaşda saxlayır və IDE vasitəsilə yenidən başlatma əmrini göndərir. Tətbiq dəyişdirilmiş faylları yenidən kompilyasiya edir, Dart VM-i yenidən başladır və main-dan istifadəçi interfeysinin son renderinə qədər bütün həyat dövrünü yenidən keçir.
Hot Restart tam yenidən qurmadan fərqlənir ki, artıq kompilyasiya edilmiş binar kitabxanalardan və Flutter freymvorkundan natativ örtükləri yenidən kompilyasiya etmədən istifadə edir. Bu, inkişaf dövrü vaxtını bir neçə dəqiqədən bir neçə saniyəyə qədər qısaldır. Flutter proqramçıları arasında sorğuya (2024) görə, Hot Restart-ın orta vaxtı 2.1 saniyədir ki, bu da flutter build əmri ilə layihənin tam yenidən qurulmasından təxminən 97% daha sürətlidir.
Mexanizm xüsusilə vizual dəyişikliklərin tez-tez yoxlanılması tələb olunan istifadəçi interfeyslərinin inkişafında tələb olunur. Proqramçı elementin rəngini, ölçüsünü və ya yerləşməsini dəyişə bilər və nəticəni simulyator və ya fiziki cihazda dərhal görə bilər, uzun kompilyasiyaya inkişaf kontekstini itirmədən. Bu, iterativ prototipləşdirməni köklü şəkildə sürətləndirir.
Hot Restart əmri yerinə yetirilərkən əməliyyatlar ardıcıllığı baş verir: dəyişdirilmiş faylların yaddaşa saxlanması, dəyişdirilmiş Dart fayllarının maşın koduna inkremental kompilyasiyası, Dart VM-in yenidən başladılması və tətbiqin giriş nöqtəsinin təkrar icrası. Dart VM — inkişaf zamanı JIT (Just-In-Time) rejimində və istehsal qurğularında AOT (Ahead-Of-Time) rejimində Dart kodunu icra edən virtual maşındır.
Hot Restart zamanı tətbiq tam həyat dövrünü keçir: main funksiyasının çağırılması, WidgetsFlutterBinding-in inisializasiyası, runApp-ın işə salınması və bütün vidjet ağacının sıfırdan qurulması. Bütün əvvəlki vidjet vəziyyətləri, dəyişənlər və keşlər təmizlənir. Bu, tətbiqin cihazda təzə quraşdırmadan sonrakı vəziyyətlə tamamilə eyni olan təmiz vəziyyətdə olmasını təmin edir.
Proses addımlar ardıcıllığı kimi təqdim edilə bilər: proqramçı IDE-də Hot Restart düyməsini sıxır, Flutter alətləri cihaza əmr göndərir, cihaz cari tətbiq skeletini yaddaşda saxlayır, Dart VM-i yeni kodla yenidən başladır və main-i yenidən işə salır. Asılılıq inyeksiya konteynerində qeydiyyatdan keçmiş bütün asılılıqlar sıfırdan yenidən yaradılır.
Əsas xüsusiyyət — natativ örtüyün (plaginlər, Kotlin kodu, Swift kodu) binar kodu yenidən kompilyasiya edilmir. Hot Restart yalnız tətbiqin Dart qatına təsir edir ki, bu da yüksək yenidən başlatma sürətini təmin edir. Dəyişikliklər natativ koda təsir edərsə, tam flutter build icrası tələb olunur.
Flutter Dart kodunun Dart VM-də icra edildiyi və UI-nin Skia və ya Impeller mühərriki vasitəsilə render edildiyi arxitekturadan istifadə edir. Hot Restart zamanı Flutter alətləri Dart VM-in izolyasiya edilmiş nümunəsini (isolate) yenidən başladır, yenilənmiş .dill fayllarını (Dart Intermediate Language) yükləyir və main funksiyasını təkrar işə salır. Bütün UI runApp çağırışı vasitəsilə yenidən qurulur ki, bu da bütün vidjetlərin aktual olmasını təmin edir.
import 'package:flutter/material.dart';
void main() {
// Hot Restart-dan sonra bu funksiya yenidən icra olunur
var prefs = await SharedPreferences.getInstance();
var themeMode = prefs.getString('theme') ?? 'light';
runApp(MyApp(themeMode: themeMode));
}
Hot Restart və Hot Reload — tez-tez qarışdırılan iki sürətləndirilmiş inkişaf mexanizmidir. Hot Reload cari vəziyyəti itirmədən işləyən tətbiqə dəyişiklikləri yükləyir, Hot Restart isə tətbiqi tamamilə yenidən başladır. Hot Reload daha sürətli işləyir (0.1–1 saniyə), lakin inisializasiya və ya sinifin statik sahələrinə aid dəyişiklikləri tətbiq etmir.
Əsas fərq — tətbiq vəziyyəti. Hot Reload vidjetlərin cari vəziyyətini saxlayır: sürüşdürmə mövqeyi, daxil edilmiş məlumatlar, açıq modal pəncərələr. Hot Restart bütün vəziyyəti ilkin vəziyyətə sıfırlayır. Dəyişiklik yalnız build metodundakı koda aiddirsə, Hot Reload kifayətdir. Dəyişiklik main, qlobal dəyişənlər və ya asılılıqlara aiddirsə — Hot Restart tələb olunur.
Hot Reload dəyişiklikləri isolate-i yenidən başlatmadan Dart VM-ə yenilənmiş kodun inyeksiyası ilə tətbiq edir. Bu, yalnız tip strukturunu pozmayan və vidjetlərin yenidən inisializasiyasını tələb etməyən dəyişikliklər üçün mümkündür. Hot Restart zamanı isolate tamamilə yenidən başladılır ki, bu da sinif və metodların silinməsi və ya adlarının dəyişdirilməsi daxil olmaqla istənilən dəyişiklikləri tətbiq etməyə imkan verir.
Flutter komandasının məlumatına görə, Hot Reload əksər dəyişikliklər üçün 1 saniyədən az çəkir, Hot Restart isə 1–3 saniyə çəkir. İstifadəçi interfeysi dəyişikliklərinin təxminən 80%-i üçün Hot Reload kifayətdir. Hot Restart tətbiq konfiqurasiyalarının, qlobal dəyişənlərin, Dart örtüyündəki natativ plaginlərin və arxitektura qərarlarının dəyişdirilməsi zamanı tələb olunur.
Aşağıdakı strategiya tövsiyə olunur: vizual düzəlişlər UI və kiçik məntiq dəyişiklikləri üçün Hot Reload istifadə edin; məlumat strukturunun dəyişdirilməsi, asılılıqların əlavə edilməsi və ya inisializasiya kodunun düzəldilməsi zamanı Hot Restart-a keçin. Bu, gözləmə vaxtını minimuma endirir və inkişaf məhsuldarlığını yüksək səviyyədə saxlayır.
İsti yenidən başlatma mexanizmi freymvork və proqramlaşdırma dilindən asılı olaraq fərqli şəkildə tətbiq edilir. Flutter Dart VM JIT kompilyasiyası vasitəsilə Hot Restart-ın ən yetkin tətbiqini təmin edir, React Native isə Metro Bundler və JavaScript Core və ya Hermes vasitəsilə oxşar mexanizmdən istifadə edir.
Flutter-də Hot Restart r əmri ilə flutter run vasitəsilə tətbiq işə salındıqdan sonra terminalda aktivləşdirilir. Alternativ olaraq — Android Studio, VS Code və ya IntelliJ IDEA-da Hot Restart düyməsi. Hot Restart yalnız debug rejimində işləyir və profile və release qurğularında mövcud deyil. İcra zamanı Flutter alətləri dəyişdirilmiş faylları kernel formatında yenidən kompilyasiya edir və cihaza göndərir.
// Hot Restart-dan əvvəl: köhnə versiya
class Counter extends StatefulWidget {
final int initialValue = 0;
// Hot Restart-dan sonra: yeni dəyər qüvvəyə minəcək
// final int initialValue = 10;
}
class CounterState extends State<Counter> {
int _count = 0;
// Hot Reload _count-u saxlayacaq, Hot Restart 0-a sıfırlayacaq
}
Flutter-də Hot Restart-ın məhdudiyyəti — debug vəziyyətini saxlaya bilməmək. Yenidən başlatmadan sonra bütün dayanma nöqtələri saxlanılır, lakin debuggerdə dəyişənlərin dəyərləri sıfırlanır. Yenidən başlatmalar arasında vəziyyəti saxlamaq üçün State Restoration tətbiq vəziyyətinin saxlanma mexanizmlərindən istifadə olunur.
React Native-də isti yenidən başlatma Metro Bundler — JavaScript modullarının qurucusu vasitəsilə tətbiq edilir. Kod dəyişdirilərkən Metro dəyişdirilmiş modulları yenidən qurur və yenilənmiş bundle-ı cihaza göndərir. React Native Fast Refresh-i dəstəkləyir — React hook-ları vasitəsilə funksional komponentlərin vəziyyətini saxlayan Hot Reload analoqu.
React Native-də tam yenidən başlatma (Reload) JavaScript mühərrikini və bütün tətbiqi tamamilə yenidən yükləyir. Bu, Flutter-də Hot Restart ilə tamamilə analojidir. İşə salmaq üçün iOS simulyatorunda Cmd+R kombinasiyası və ya Android-də R düyməsinin iki dəfə basılması istifadə olunur. React Native-də tam yenidən başlatma vaxtı bundle-ın ölçüsündən asılı olaraq 2–8 saniyə arasında dəyişir.
Hot Restart bir sıra inkişaf ssenarilərində əvəzolunmaz vasitədir. Birinci və ən aşkar — tətbiqin qlobal konfiqurasiyasının dəyişdirilməsi: dizayn mövzuları, lokallaşdırma, vəziyyət təminatçıları. Əgər vidjet ağacının kökündə təminatçını dəyişdirmisinizsə və ya DI konteynerinə yeni modul əlavə etmisinizsə, Hot Restart bütün komponentlərin düzgün inisializasiyasını təmin edir.
İkinci ssenari — statik dəyişənlərin və sabitlərin dəyişdirilməsi. Dart-da statik sahələr sinif yüklənərkən bir dəfə inisializasiya olunur. Hot Reload statik sahələrin dəyişikliklərini tətbiq etmir, buna görə də onların yenilənməsi üçün Hot Restart məcburidir. Bu, xüsusilə konfiqurasiya sabitləri, API URL-ləri və funksiya bayraqları ilə işləyərkən aktualdır.
Üçüncü ssenari — inisializasiyanın debug edilməsi: main funksiyasının, splash ekranının, asılılıqların yüklənməsinin yoxlanılması. Hər Hot Restart zamanı tətbiq tam inisializasiya dövrünü keçir ki, bu da yalnız başlanğıcda baş verən səhvləri — SharedPreferences ilə problemlər, verilənlər bazasına qoşulma xətaları, inisializasiya timeoutlarını aşkar etməyə imkan verir.
Dördüncü ssenari — boş vəziyyətin test edilməsi. Hot Restart tətbiqin bütün vəziyyətini sıfırlayır ki, bu da ilk işə salınma zamanı davranışı yoxlamağa imkan verir: onboarding-in göstərilməsi, icazə sorğuları, boş siyahılar və placeholderlər. Təkrarlanan test üçün bu, tətbiqi yenidən quraşdırmaqdan əhəmiyyətli dərəcədə sürətlidir.
Tez-tez verilən suallar
Hot Restart tətbiqi və Dart VM-i tamamilə yenidən başladır, vəziyyəti ilkin vəziyyətə sıfırlayır. Hot Reload işləyən tətbiqə dəyişiklikləri yeridir, cari UI vəziyyətini saxlayır. Hot Reload daha sürətlidir, lakin inisializasiya və qlobal dəyişənlərin dəyişiklikləri üçün tətbiq olunmur.
Terminalda flutter run işə salındıqdan sonra Hot Restart üçün R (Shift+R) düyməsini basın. Android Studio və ya VS Code-da debug panelində Hot Restart düyməsini istifadə edin. Əmr yalnız debug rejimində mövcuddur.
Orta ölçülü layihələr üçün tipik Hot Restart vaxtı 1–3 saniyə təşkil edir. Vaxt Dart fayllarının sayından, vidjet ağacının mürəkkəbliyindən və cihazın performansından asılıdır. Böyük layihələr üçün vaxt 5–8 saniyəyə çata bilər.
Xeyr, Hot Restart yalnız debug rejimində mövcuddur. Release və profile qurğularında isti yenidən yükləməni dəstəkləməyən AOT kompilyasiyası istifadə olunur. Release-də kodu yeniləmək üçün tam yenidən qurma tələb olunur.
Hot Restart natativ koda — Kotlin, Swift və ya Java plaginlərinə təsir etmir. Əgər dəyişikliklər plaginin natativ koduna edilirsə, layihənin tam yenidən qurulması tələb olunur. Hot Restart yalnız tətbiqin Dart qatı üçün effektivdir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun