موبائل ایپ کا لائف سائیکل اس بات کا تعین کرتا ہے کہ ایپ لانچ ہونے، چھوٹا ہونے، پس منظر سے واپس آنے اور بند ہونے پر کیسے برتاؤ کرتی ہے۔ اس مضمون میں ہم App Lifecycle (iOS)، Activity Lifecycle (Android)، Fragment Lifecycle، ViewController Lifecycle اور LifecycleOwner کا جائزہ لیں گے۔ ان عملوں کو سمجھنا میموری لیک، ڈیٹا کی کمی اور ایپ کے غلط رویے کو روکنے کے لیے بہت ضروری ہے۔ مزید تفصیلات کے لیے سرکاری Android Activity Lifecycle دستاویزات دیکھیں۔
اہم نکات
انفرادی اسکرینوں کے لائف سائیکل میں جانے سے پہلے، پوری ایپ کے لائف سائیکل کو سمجھنا ضروری ہے۔ iOS میں، ایپ پانچ حالتوں سے گزرتی ہے: Not Running (چل نہیں رہی)، Inactive (پس منظر میں، واقعات وصول نہیں کرتی)، Active (فعال)، Background (پس منظر میں، کوڈ چل رہا ہے) اور Suspended (پس منظر میں، کوڈ معطل)۔ ان حالتوں کا انتظام AppDelegate میں applicationDidFinishLaunching، applicationDidBecomeActive، applicationWillResignActive، applicationDidEnterBackground اور applicationWillTerminate طریقوں کے ذریعے کیا جاتا ہے۔
Android میں، اس کا ہم منصب Application Lifecycle ہے، جسے Application.ActivityLifecycleCallbacks انٹرفیس کے ذریعے ٹریک کیا جاتا ہے۔ تاہم، Android ایک Activity — ایک انفرادی ایپ اسکرین — کے لائف سائیکل پر زیادہ توجہ دیتا ہے۔ اس کی وجہ یہ ہے کہ Android ایپ متعدد Activities پر مشتمل ہو سکتی ہے، ہر ایک کا اپنا چکر ہوتا ہے۔
Android میں جدید طریقہ lifecycle-process لائبریری سے ProcessLifecycleOwner استعمال کرنا ہے۔ یہ کسی مخصوص Activity سے منسلک ہوئے بغیر پورے عمل کی حالت کو ٹریک کرنے کی اجازت دیتا ہے۔ iOS میں، ایپ کی حالت کو ٹریک کرنے کے لیے UISceneDelegate (iOS 13 سے) یا AppDelegate استعمال کیا جاتا ہے۔ SceneDelegate iPad پر متعدد ونڈوز (ملٹی ونڈو) کو ہینڈل کرتا ہے۔ App Lifecycle کو سمجھنا IT Sectr کے لیے پس منظر کی مطابقت پذیری، سٹریمنگ اور VoIP کالوں والی ایپس تیار کرتے وقت خاص طور پر اہم ہے۔
Activity Android ایپ کا بنیادی جزو ہے، جو ایک اسکرین کی نمائندگی کرتا ہے۔ Activity کا ایک واضح طور پر متعین لائف سائیکل ہوتا ہے جسے آپریٹنگ سسٹم صارف کے اعمال اور نظام کے واقعات (اسکرین گھماؤ، آنے والی کال، کم میموری) کے جواب میں منظم کرتا ہے۔
| طریقہ | وضاحت | کیا کریں |
|---|---|---|
| onCreate | Activity بننے پر ایک بار کہلاتا ہے | UI ابتدا، findViewById، ViewModel سیٹ اپ |
| onStart | Activity نظر آنے لگتی ہے | اینیمیشن شروع کریں، BroadCastReceiver رجسٹر کریں |
| onResume | Activity ان پٹ فوکس حاصل کرتی ہے | کیمرہ، سینسر، اینیمیشن شروع کریں |
| onPause | Activity فوکس کھو دیتی ہے (جزوی طور پر نظر آتی ہے) | مسودے محفوظ کریں، اینیمیشن روکیں |
| onStop | Activity نظر نہیں آتی | وسائل جاری کریں، اپ ڈیٹ روکیں |
| onDestroy | Activity ختم ہو جاتی ہے | تمام حوالہ جات صاف کریں، LiveData سے ان سبسکرائب کریں |
| onRestart | onStop کے بعد onStart سے پہلے کہلاتا ہے | دوبارہ ابتدا |
اہم: عارضی حالت محفوظ کرنے کے لیے onSaveInstanceState onStop سے پہلے کہلاتا ہے۔ بحالی onCreate میں Bundle savedInstanceState کے ذریعے یا ViewModel میں SavedStateHandle کے ذریعے ہوتی ہے۔ لائف سائیکل کی مناسب ہینڈلنگ کے بغیر، اسکرین گھمانے پر ایپ تمام غیر محفوظ شدہ ڈیٹا کھو دے گی۔
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("draft", draftText)
}
override fun onDestroy() {
super.onDestroy()
// Отписка от всех подписок
}
}
Jetpack Compose میں، Activity کا لائف سائیکل تبدیل نہیں ہوتا، لیکن Compose اضافی اوزار فراہم کرتا ہے: LifecycleOwner کے ذریعے Lifecycle-aware composition، ختم ہونے پر خودکار وسائل کی صفائی کے لیے LifecycleEventEffect اور DisposableEffect اثرات۔
Android میں Fragment Activity کے اندر رہتا ہے اور اس کا اپنا لائف سائیکل ہوتا ہے، جو جزوی طور پر Activity سے ملتا ہے لیکن نئے طریقے شامل کرتا ہے۔ Fragment کو Activity کو ختم کیے بغیر شامل، تبدیل اور ہٹایا جا سکتا ہے، جو انہیں زیادہ لچکدار لیکن زیادہ پیچیدہ بھی بناتا ہے۔
Fragment Lifecycle کے اہم طریقے: onAttach — Fragment Activity سے منسلک (پہلی کال)؛ onCreate — ڈیٹا کی ابتدا؛ onCreateView — View کی تخلیق؛ onViewCreated — View بن گئی، UI ترتیب دیا جا سکتا ہے؛ onStart — Fragment نظر آتا ہے؛ onResume — Fragment فوکس میں؛ onPause — Fragment فوکس کھو دیتا ہے؛ onStop — Fragment نظر نہیں آتا؛ onDestroyView — View ختم ہو جاتی ہے؛ onDestroy — Fragment ختم ہو جاتا ہے؛ onDetach — Fragment Activity سے الگ ہو جاتا ہے۔
Activity سے اہم فرق: onCreateView اور onDestroyView کئی بار کہلائے جا سکتے ہیں (مثال کے طور پر، TabLayout تبدیل کرتے وقت)، جبکہ onCreate ایک بار کہلاتا ہے۔ لہذا، View کی ابتدا onViewCreated میں کی جانی چاہیے، onCreateView میں نہیں۔ View سے متعلق وسائل (جیسے RecyclerView ایڈاپٹر) کو onDestroyView میں صاف کیا جانا چاہیے۔
UIViewController iOS میں اسکرینوں کے انتظام کے لیے بنیادی کلاس ہے۔ اس کا لائف سائیکل طریقوں کے ایک سلسلے پر مشتمل ہے جسے UIKit خود بخود کہلاتا ہے۔ اس چکر کو سمجھنا مناسب UI ابتدا، ڈیٹا مینجمنٹ اور میموری ہینڈلنگ کے لیے بہت ضروری ہے۔
| طریقہ | کب کہلاتا ہے | عام استعمال |
|---|---|---|
| loadView | جب View Controller اپنا View درجہ بندی لوڈ کرتا ہے | Storyboard کے بغیر حسب ضرورت ابتدا |
| viewDidLoad | View میموری میں لوڈ ہونے کے بعد (ایک بار) | UI ترتیب، ابتدائی ڈیٹا لوڈ کریں |
| viewWillAppear | اسکرین پر View ظاہر ہونے سے پہلے | ڈیٹا اپ ڈیٹ کریں، اطلاعات سبسکرائب کریں |
| viewDidAppear | اسکرین پر View ظاہر ہونے کے بعد | اینیمیشن شروع کریں، ٹریکنگ اینیمیشن شروع کریں |
| viewWillDisappear | اسکرین سے View غائب ہونے سے پہلے | حالت محفوظ کریں، اطلاعات سے ان سبسکرائب کریں |
| viewDidDisappear | اسکرین سے View غائب ہونے کے بعد | اینیمیشن روکیں، وسائل جاری کریں |
| dealloc | جب View Controller ختم ہوتا ہے | تمام وسائل جاری کریں |
اہم: viewDidLoad View Controller کی زندگی میں صرف ایک بار کہلاتا ہے۔ ہر بار ظاہر ہونے پر ڈیٹا اپ ڈیٹ کرنے کے لیے viewWillAppear استعمال کریں۔ اگر آپ viewWillAppear میں NotificationCenter سبسکرائب کرتے ہیں، تو میموری لیک سے بچنے کے لیے viewDidDisappear میں ان سبسکرائب کرنا یقینی بنائیں۔
SwiftUI View ڈھانچوں کے ذریعے Views کے لائف سائیکل کا انتظام کرتا ہے۔ کال بیک طریقوں کے بجائے، SwiftUI onAppear اور onDisappear موڈیفائر استعمال کرتا ہے۔ عالمی ایپ حالتوں کے لیے، App اور Scene پروٹوکول کے ذریعے App Lifecycle استعمال کیا جاتا ہے۔ SwiftUI حالت کی بنیاد پر Views کی تخلیق اور خاتمے کا خود بخود انتظام کرتا ہے، جو ڈیولپمنٹ کو آسان بناتا ہے لیکن View کی شناخت اور عمر کو سمجھنے کی ضرورت ہوتی ہے۔
struct ContentView: View {
var body: some View {
Text("Hello")
.onAppear {
print("View появилась")
}
.onDisappear {
print("View исчезла")
}
}
}
LifecycleOwner Android Architecture Components کا ایک انٹرفیس ہے جو ایسی چیز کو نشان زد کرتا ہے جس کا لائف سائیکل ہو (Activity, Fragment)۔ LifecycleObserver ایک انٹرفیس ہے جو کسی چیز کو LifecycleOwner کے واقعات سبسکرائب کرنے کی اجازت دیتا ہے۔ یہ مل کر جدید Android ڈیولپمنٹ میں رد عمل والے لائف سائیکل مینجمنٹ کی بنیاد بناتے ہیں۔
onStart/onStop میں واضح طور پر طریقے کہلانے کے بجائے، DefaultLifecycleObserver (پرانے LifecycleObserver اور @OnLifecycleEvent تشریحات کا متبادل) استعمال کرنے کی سفارش کی جاتی ہے۔ یہ Google کی طرف سے ViewModel اور دیگر اجزاء کے لیے فروغ دینے والا طریقہ ہے جنہیں Activity یا Fragment کے براہ راست حوالہ جات کے بغیر لائف سائیکل پر رد عمل ظاہر کرنے کی ضرورت ہوتی ہے۔
class MyObserver : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
// Подписка на обновления
}
override fun onStop(owner: LifecycleOwner) {
// Отписка
}
}
IT Sectr میں، ہم تمام Android پروجیکٹس میں LifecycleOwner استعمال کرتے ہیں۔ ViewModel viewModelScope اور lifecycleScope کے ذریعے Activity کے LifecycleOwner کو سبسکرائب کرتا ہے، جو Activity ختم ہونے پر کوروٹینز کو خود بخود منسوخ کرنے کی ضمانت دیتا ہے۔ یہ میموری لیک کو روکتا ہے اور کوڈ کو صاف اور محفوظ بناتا ہے۔
اکثر پوچھے گئے سوالات
Activity چھ حالتوں سے گزرتی ہے: Created (onCreate)، Started (onStart)، Resumed (onResume)، Paused (onPause)، Stopped (onStop)، Destroyed (onDestroy)۔
ترتیب: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear۔ viewDidLoad ایک بار کہلاتا ہے۔
LifecycleOwner Android Architecture Components کا ایک جزو ہے جو Activity یا Fragment کے لائف سائیکل کا مالک ہوتا ہے۔ LifecycleObserver کے ذریعے واقعات سبسکرائب کرنے کی اجازت دیتا ہے۔
iOS ایپ پانچ حالتوں سے گزرتی ہے: Not Running، Inactive، Active، Background، Suspended۔ UIApplicationDelegate کے ذریعے منتقلی کا انتظام کیا جاتا ہے۔
Saved State اسکرین گھماؤ یا عمل کی دوبارہ تخلیق پر Activity/Fragment کی حالت محفوظ رکھنے کا Android طریقہ کار ہے۔ یہ onSaveInstanceState اور SavedStateHandle استعمال کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔