Hot Restart ایک میکانزم ہے جو ڈیویلپمنٹ کے دوران موبائل ایپلیکیشن کو تیزی سے دوبارہ لوڈ کرتا ہے، جس میں ایپلیکیشن اپ ڈیٹ شدہ سورس کوڈ کے ساتھ مکمل طور پر دوبارہ شروع ہوتا ہے۔ مکمل دوبارہ ترتیب کے برعکس، Hot Restart پہلے سے مرتب شدہ بائنری کوڈ استعمال کرتا ہے اور صرف Dart VM کو دوبارہ لوڈ کرتا ہے، جس سے ڈیویلپمنٹ سائیکل کا وقت کم ہوتا ہے۔ Flutter دستاویز (2025) کے مطابق، ایک طور کا Hot Restart 1 سے 3 سیکنڈ لیتا ہے۔ Hot Restart خاص طور پر اس وقت مفید ہے جب ایپلیکیشن کی گلوبل سٹیٹ اور ابتدائی کوڈ میں تبدیلی کی جاتی ہے۔
اہم نکات
Hot Restart ایک ڈیویلپمنٹ میکانزم ہے جس میں مکمل پروجیکٹ دوبارہ ترتیب کی ضرورت کے بغیر ایپلیکیشن مکمل طور پر اپ ڈیٹ شدہ سورس کوڈ کے ساتھ دوبارہ لوڈ ہوتا ہے۔ ڈیویلپر کوڈ میں تبدیلیاں کرتا ہے، فائل محفوظ کرتا ہے، اور IDE کے ذریعہ دوبارہ شروع کا حکم بھیجتا ہے۔ ایپلیکیشن تبدیل شدہ فائلوں کو دوبارہ ترتیب دیتی ہے، Dart VM کو دوبارہ شروع کرتی ہے، اور main سے لے کر صرف کا آخری رینڈرنگ تک پورے لائف سائیکل سے گزرتی ہے۔
Hot Restart مکمل دوبارہ تعمیر سے اس لحاظ سے مختلف ہے کے یہ پہلے سے مرتب بائنری لائبریریوں اور Flutter فریم ورک کو مقامی ریپرز کو دوبارہ ترتیب دیئے بغیر استعمال کرتا ہے۔ یہ ڈیویلپمنٹ سائیکل کا وقت کئی منٹوں سے گھٹا کر چند سیکنڈ کر دیتا ہے۔ Flutter ڈیویلپر سروے (2024) کے مطابق، اوسط Hot Restart وقت 2.1 سیکنڈ ہے، جو flutter build کمانڈ کے ذریعہ مکمل پروجیکٹ دوبارہ تعمیر سے تقریبنا 97% تیز ہے۔
یہ میکانزم خاص طور پر صرف برائے استعمال کے انٹرفیس کی ترقی میں مانگ ہہے جہاں بصری تبدیلیوں کی بار بار جانچ کی ضرورت ہوتی ہے۔ ڈیویلپر ایک عنصر کا رنگ، حجم یا مقام بدل سکتا ہے اور طویل ترتیب کے نتیجے میں ڈیویلپمنٹ کا سیاق کھوئے بغیر سمیولیٹر یا فزیکل آلات پر فوری نتیجہ دیکھ سکتا ہے۔ یہ تکراری پروٹوٹائپنگ کو بہت تیز کرتا ہے۔
Hot Restart کا حکم چلانے پر، عملیات کا ایک سلسلہ وقوع پذیر ہوتا ہے: تبدیل شدہ فائلوں کو محفوظ کرنا، تبدیل شدہ Dart فائلوں کو مشین کوڈ میں اضافہ شدہ ترتیب دینا، Dart VM کو دوبارہ شروع کرنا اور ایپلیکیشن کے داخلی مقام کو دوبارہ چلانا۔ Dart VM ایک ورتوئل مشین ہے جو ڈیویلپمنٹ کے دوران JIT (Just-In-Time) موڈ میں اور پروڈکشن بائلز میں AOT (Ahead-Of-Time) موڈ میں Dart کوڈ چلاتی ہے۔
Hot Restart کے دوران، ایپلیکیشن ایک مکمل لائف سائیکل سے گزرتی ہے: main فنکشن کو کال کرنا، WidgetsFlutterBinding کو آغاز کرنا، runApp چلانا اور صفر سے پورا وائیجٹ ٹری بنانا۔ پځچلی سب وائیجٹ حالتیں، متغیرات اور کیش صاف کر دیئے جاتے ہیں۔ یہ اس بات کی ضمانت دیتا ہے کے ایپلیکیشن صاف حالت میں ہے، جو آلات پر نئی تنصیب کے بعد کی حالت سے مکمل طور پر یکساں ہے۔
عملیہ کو مراحل کے ایک سلسلے کے طور پر پیش کیا جا سکتا ہے: ڈیویلپر IDE میں Hot Restart بٹن دباتا ہے، Flutter آلات آلات کو حکم بھیجتی ہے، آلات موجودہ ایپلیکیشن کا پنجر محفوظ کرتا ہے، Dart VM کو نئے کوڈ کے ساتھ دوبارہ شروع کرتا ہے اور main کو دوبارہ چلاتا ہے۔ DI کنٹینر میں رجسٹر شدہ تمام انحصاریاں صفر سے دوبارہ تیار کی جاتی ہیں۔
ایک اہم خصوصیت یہ ہے کے مقامی شیل (پلاگائن، Kotlin کوڈ، Swift کوڈ) کا بائنری کوڈ دوبارہ ترتیب نہیں دیا جاتا۔ Hot Restart صرف ایپلیکیشن کی Dart پرت کو متاثر کرتا ہے، جو دوبارہ شروع کی تیزی کو یقینی بناتا ہے۔ اگر تبدیلیاں مقامی کوڈ کو متاثر کرتی ہیں، تو مکمل flutter build کی ضرورت ہے۔
Flutter ایک ایسی تعمیرات استعمال کرتا ہے جہاں Dart کوڈ Dart VM پر چلتا ہے اور UI Skia یا Impeller انجن کے ذریعہ رینڈر ہوتا ہے۔ Hot Restart کے دوران، Flutter آلات Dart VM کی ایک علاحدہ مثال (isolate) کو دوبارہ شروع کرتی ہے، اپ ڈیٹ .dill فائلیں (Dart Intermediate Language) لوڈ کرتی ہے، اور main فنکشن کو دوبارہ چلاتی ہے۔ پورا UI runApp کال کے ذریعہ صفر سے دوبارہ تعمیر کیا جاتا ہے، جو اس بات کی ضمانت دیتا ہے کے تمام وائیجٹ اپ ڈیٹ ہیں۔
import 'package:flutter/material.dart';
void main() {
// Hot Restart کے بعد، یہ فنکشن دوبارہ چلتا ہے
var prefs = await SharedPreferences.getInstance();
var themeMode = prefs.getString('theme') ?? 'light';
runApp(MyApp(themeMode: themeMode));
}
Hot Restart اور Hot Reload دو تیز ترقی کے میکانزم ہیں جو اکسر الجھا دیئے جاتے ہیں۔ Hot Reload موجودہ حالت کو کھوئے بغیر چلتے ایپلیکیشن میں تبدیلیاں لوڈ کرتا ہے، جبکہ Hot Restart ایپلیکیشن کو مکمل طور پر دوبارہ شروع کرتا ہے۔ Hot Reload تیز کام کرتا ہے (0.1–1 سیکنڈ) لیکن ابتدائی کارروائی یا ستاٹک کلاس فائلڈز کو متاثر کرنے والی تبدیلیوں کو نافذ نہیں کرتا۔
بنیادی فرق ایپلیکیشن کی حالت ہے۔ Hot Reload وائیجٹ کی موجودہ حالت کو محفوظ رکھتا ہے: اسکرول کی پوزیشن، درج کردہ ڈیٹا، کھولی ہوئی موڈل وینڈوز۔ Hot Restart تمام حالتوں کو ابتدائی میں ری سیٹ کر دیتا ہے۔ اگر تبدیلی صرف build کے طریقے میں کوڈ کو متاثر کرتی ہے، تو Hot Reload کافی ہے۔ اگر تبدیلی main، گلوبل متغیرات یا انحصاریاں کو متاثر کرتی ہے، تو Hot Restart کی ضرورت ہے۔
Hot Reload isolate کو دوبارہ شروع کیئے بغیر Dart VM میں اپ ڈیٹ کوڈ ٹیکا کر تبدیلیوں کو نافذ کرتا ہے۔ یہ صرف ان تبدیلیوں کے لیے ممکن ہے جو قسم کے چھٹے کو نہ توڑیں اور وائیجٹ کی دوبارہ آغاز کی ضرورت نہ ہو۔ Hot Restart کے دوران، isolate مکمل طور پر دوبارہ شروع ہوتا ہے، جو کلاسیں اور طریقوں کو حذف یا دوبارہ نام دینے سمیت کسی بھی تبدیلی کو نافذ کرنے کی اجازت دیتا ہے۔
Flutter ٹیم کے مطابق، Hot Reload زیاده تر تبدیلیوں کے لیے 1 سیکنڈ سے کم لیتا ہے، جبکہ Hot Restart 1 سے 3 سیکنڈ لیتا ہے۔ تقریبنا 80% صرف استعمال کے انٹرفیس تبدیلیوں کے لیے Hot Reload کافی ہے۔ Hot Restart کی ضرورت ایپلیکیشن کی ترتیبات، گلوبل متغیرات، Dart ریپر میں مقامی پلاگائن، اور تعمیراتی فیصلے بدلتے وقت ہوتی ہے۔
مندرجہ ذیل حکمت عملی متجویز ہے: UI کی بصری ترمیموں اور چھوٹی منطقی تبدیلیوں کے لیے Hot Reload استعمال کریں؛ ڈیٹا کے چھٹے بدلنے، انحصاریاں جوڑنے یا ابتدائی کوڈ میں ترمیم کرتے وقت Hot Restart پر سوئچ کریں۔ یہ انتظار کا وقت کم کرتا ہے اور اعلی ترقی پائداری کو برقرار رکھتا ہے۔
ہاٹ ریسٹارٹ کا میکانزم فریم ورک اور پروگرامنگ زبان کے مطابق مختلف طریقے سے نافذ کیا جاتا ہے۔ Flutter Dart VM JIT ترتیب کے ذریعہ Hot Restart کا سب سے پیچ نفاذ فراہم کرتا ہے، جبکہ React Native Metro Bundler اور JavaScript Core یا Hermes کے ذریعہ ایک متماثل میکانزم استعمال کرتا ہے۔
Flutter میں flutter run کے زریعہ ایپلیکیشن شروع کرنے کے بعد ٹارمینل میں r کمانڈ کے ذریعہ Hot Restart فعال ہوتا ہے۔ متبادل طور پر، Android Studio، VS Code یا IntelliJ IDEA میں Hot Restart بٹن کا استعمال کریں۔ Hot Restart صرف debug موڈ میں کام کرتا ہے اور profile اور release بائلز میں دستیاب نہیں ہے۔ عمل کرتے وقت، Flutter آلات تبدیل شدہ فائلوں کو kernel فارمیٹ میں دوبارہ ترتیب دیتی ہے اور آلات کو بھیجتی ہے۔
// Hot Restart سے پہلے: پرانے ورشن
class Counter extends StatefulWidget {
final int initialValue = 0;
// Hot Restart کے بعد: نئی قیمت نافذ ہوگی
// final int initialValue = 10;
}
class CounterState extends State<Counter> {
int _count = 0;
// Hot Reload _count کو محفوظ رکھتا ہے، Hot Restart اسے 0 پر ری سیٹ کرتا ہے
}
Flutter میں Hot Restart کی ایک حد ڈیبگ حالت کو محفوظ رکھنے میں ناقابلیت ہے۔ دوبارہ شروع کے بعد، تمام برےک پائنٹس محفوظ رہتے ہیں، لیکن ڈیبگر میں متغیرات کی قیمتیں ری سیٹ ہو جاتی ہیں۔ دوبارہ شروع کے درمیان حالت کو محفوظ رکھنے کے لیے State Restoration میکانزم استعمال کیا جاتا ہے۔
React Native میں، ہاٹ ریسٹارٹ Metro Bundler کے ذریعہ نافذ کیا جاتا ہے، جو ایک JavaScript ماڈیول بنڈلر ہے۔ جب کوڈ بدلتا ہے، Metro تبدیل شدہ ماڈیولوں کو دوبارہ تعمیر کرتا ہے اور اپ ڈیٹ بنڈل آلات کو بھیجتا ہے۔ React Native Fast Refresh کی حمایت کرتا ہے، جو Hot Reload کا ایک متبادل ہے جو React hooks استعمال کرکے فنکشنل کمپوننٹس کی حالت کو محفوظ رکھتا ہے۔
React Native میں مکمل ریسٹارٹ (Reload) JavaScript انجن اور مکمل ایپلیکیشن کو دوبارہ لوڈ کرتا ہے۔ یہ Flutter میں Hot Restart کے مکمل طور پر مشابہ ہے۔ اسے فعال کرنے کے لیے iOS سیمیولیٹر پر Cmd+R یا Android پر R کو دو بار دبائیں۔ React Native میں مکمل ریسٹارٹ کا وقت بنڈل کے حجم کے مطابق 2 سے 8 سیکنڈ تک مختلف ہوتا ہے۔
Hot Restart کئی ڈیویلپمنٹ مناظر میں ایک ناگزیر آلا ہے۔ پہلا اور سب سے واضح ایپلیکیشن کی گلوبل ترتیب کو بدلنا ہے: ثیمز، مقامیکرداری، حالت فراہم کنندگان۔ اگر آپ نے وائیجٹ ٹری کی جڈر میں ایک فراہم کنندگی کو بدل دیا یا DI کنٹینر میں ایک نئا ماڈیول شامل کیا، تو Hot Restart تمام کمپوننٹس کی درست ابتدائی کارروائی کی ضمانت دیتا ہے۔
دوسرا منظر ستاٹک متغیرات اور مساقت کو بدلنا ہے۔ Dart میں، ستاٹک فائلڈز کلاس لوڈ ہونے پر ایک بار آغاز کیئے جاتے ہیں۔ Hot Reload ستاٹک فائلڈز پر تبدیلیاں نافذ نہیں کرتا، اس لیے انہیں اپ ڈیٹ کرنے کے لیے Hot Restart کی ضرورت ہے۔ یہ خاص طور پر ترتیب کے مساقت، API URL اور فیچر فلیگز کے ساتھ کام کرتے وقت متعلق ہے۔
تیسرا منظر ابتدائی کارروائی کی ڈیبگنگ ہے: main فنکشن، اسپلیش سکرین، انحصاریوں کی لوڈنگ کی جانچ۔ ہر Hot Restart کے ساتھ، ایپلیکیشن ایک مکمل ابتدائی سائیکل سے گزرتی ہے، جو صرف شروع کے وقت ہونے والی غلطیوں کی شناسائی کی اجازت دیتا ہے — SharedPreferences کے ساتھ مسائل، ڈیٹابیس کنیکشن کی غلطیاں، ابتدائی سیمہا ختمی۔
چوتھا منظر خالی حالت کی آزمائش ہے۔ Hot Restart ایپلیکیشن کی تمام حالتوں کو ری سیٹ کرتا ہے، جو آپکو پہلی لائنچ پر روائے کی جانچ کی اجازت دیتا ہے: آنبورڈنگ کی نمائش، اجازتوں کی درخواست، خالی فہرستیں اور پلیس ہولڈر سکرینز۔ دوہرانے کے قابل آزمائش کے لیے، یہ ایپلیکیشن کو دوبارہ انسٹال کرنے سے کافی تیز ہے۔
اکثر پوچے جانے والے سوالات
Hot Restart ایپلیکیشن اور Dart VM کو مکمل طور پر دوبارہ شروع کرتا ہے، حالت کو ابتدائی میں ری سیٹ کرتا ہے۔ Hot Reload چلتے ایپلیکیشن میں تبدیلیاں ٹیکا کرتا ہے، موجودہ UI حالت کو محفوظ رکھتا ہے۔ Hot Reload تیز ہے لیکن ابتدائی تبدیلیوں اور گلوبل متغیرات کے لیے استعمال نہیں کیا جا سکتا۔
flutter run چلانے کے بعد ٹارمینل میں Hot Restart کے لیے R (Shift+R) دبائیں۔ Android Studio یا VS Code میں، ڈیبگ پینل پر Hot Restart بٹن کا استعمال کریں۔ یہ کمانڈ صرف debug موڈ میں دستیاب ہے۔
درمیانے پروجیکٹ کے لیے 1 سے 3 سیکنڈ لگتا ہے۔ وقت Dart فائلوں کی تعداد، وائیجٹ ٹری کی پیچیدگی اور آلات کی کارکردگی پر منحصر کرتا ہے۔ بڑے پروجیکٹ کے لیے، وقت 5–8 سیکنڈ تک پہنچ سکتا ہے۔
نہیں، Hot Restart صرف debug موڈ میں دستیاب ہے۔ Release اور profile بائلز AOT ترتیب استعمال کرتے ہیں، جو ہاٹ ریلوڈنگ کی حمایت نہیں کرتا۔ Release میں کوڈ کو اپ ڈیٹ کرنے کے لیے مکمل دوبارہ تعمیر کی ضرورت ہے۔
Hot Restart مقامی کوڈ کو متاثر نہیں کرتا — Kotlin، Swift یا Java پلاگائن۔ اگر پلاگائن کے مقامی کوڈ میں تبدیلیاں کی جاتی ہیں، تو مکمل پروجیکٹ دوبارہ تعمیر کی ضرورت ہے۔ Hot Restart صرف ایپلیکیشن کی Dart پرت کے لیے مؤثر ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں