onStart: خلاصہ، Android اسکرین پر Activity کی مرئیت

مصنف: IT Sectr اشاعت: 2026-03-04 مطالعے کا وقت: 9 منٹ

onStart ایک Android لائف سائیکل طریقہ ہے جو اس وقت کال کیا جاتا ہے جب Activity یا Fragment صارف کو نظر آنے لگتا ہے۔ اس لمحے، اسکرین ڈیوائس ڈسپلے پر ظاہر ہوتی ہے، لیکن ابھی تک صارف کے ساتھ تعامل نہیں کر سکتی — ان پٹ فوکس onResume کال ہونے تک غیر حاضر رہتا ہے۔ onStart طریقہ سسٹم سننے والوں کو رجسٹر کرنے، جغرافیائی محل وقوع کی خدمات سے منسلک ہونے اور اینیمیشن شروع کرنے کے لیے مثالی ہے جو اس وقت تک چلنی چاہئیں جب تک جزو اسکرین پر نظر آ رہا ہو۔ مکمل Activity لائف سائیکل کے بارے میں مزید جاننے کے لیے مضمون پڑھیں Activity Lifecycle۔

اہم نکات

  • onStart — کال کیا جاتا ہے جب Activity یا Fragment اسکرین پر نظر آتا ہے؛ onResume سے پہلے آتا ہے
  • سننے والوں کی رجسٹریشن — BroadcastReceiver، LocationListener، SensorListener onStart میں رجسٹر ہوتے ہیں اور onStop میں ہٹائے جاتے ہیں
  • اینیمیشنز — اینیمیشن شروع کرنا جو اسکرین نظر آنے تک چلنی چاہئیں؛ onStop میں روکنا
  • باؤنڈ سروسز — onStart میں bindService کے ذریعے کلائنٹ-سرور سروسز سے منسلک ہونا، onStop میں منقطع کرنا
  • onStart بمقابلہ onResume — onStart = مرئیت، onResume = فوکس + تعامل؛ اسکرین سرگرمی کی مختلف سطحیں
  • Fragment.onStart — Activity.onStart کے بعد کال کیا جاتا ہے، جب Fragment کنٹینر میں نظر آتا ہے
  • onStart/onStop جوڑی — onStart میں منسلک وسائل کو رساو روکنے کے لیے onStop میں ضرور جاری کریں

Android میں onStart کا خلاصہ

onStart Activity لائف سائیکل کا دوسرا طریقہ ہے، جسے سسٹم onCreate کے بعد (یا رکی ہوئی حالت سے واپسی پر onRestart کے بعد) کال کرتا ہے۔ onStart کال کے لمحے، Activity یا Fragment اسکرین پر نظر آتا ہے۔ صارف انٹرفیس دیکھتا ہے، لیکن اسکرین ابھی تعامل کے لیے تیار نہیں ہے — ان پٹ فوکس صرف onResume کے بعد ظاہر ہوگا۔

onStart طریقہ Activity کے «مرئی زندگی» (visible lifetime) میں آتا ہے — onStart اور onStop کے درمیان کا وقفہ۔ اس مدت کے دوران، Activity دوسری ونڈوز (مثلاً شفاف Activity یا ڈائیلاگ ونڈو) سے جزوی طور پر ڈھکی ہو سکتی ہے، لیکن اس کا UI نظر آتا رہتا ہے۔ یہ مرئی زندگی کو «پیش منظر زندگی» (onResume — onPause) سے ممتاز کرتا ہے، جب Activity کے پاس مکمل ان پٹ فوکس ہوتا ہے۔

اس تین سطحی درجہ بندی کو سمجھنا کوڈ کی صحیح تقسیم کے لیے اہم ہے۔ onCreate — ایک بار کی ابتدائیہ، onStart — مرئی وسائل کو منسلک کرنا، onResume — خصوصی وسائل تک خصوصی رسائی۔ ڈویلپر جو ان سطحوں کو الجھاتا ہے، اسکرینوں کے درمیان سوئچ کرتے وقت میموری رساو یا ایپلیکیشن کے غلط رویے کا خطرہ مول لیتا ہے۔

Activity میں onStart

Activity میں، onStart طریقہ ہر بار کال کیا جاتا ہے جب اسکرین ڈسپلے پر ظاہر ہوتی ہے — پہلی بار لانچ پر (onCreate کے بعد) اور پس منظر سے واپسی پر (onRestart کے بعد) دونوں۔ onCreate کے برعکس، onStart کو Activity مثال کی زندگی میں کئی بار کال کیا جا سکتا ہے، اس لیے وہ کوڈ جو اسکرین ظاہر ہونے پر ہر بار چلنا چاہیے یہاں رکھا جاتا ہے۔

kotlin
class DashboardActivity : AppCompatActivity() {
    private val connectivityReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            val isConnected = ... // ConnectivityManager چیک
            binding?.statusIndicator?.setColor(
                if (isConnected) Color.GREEN else Color.RED
            )
        }
    }

    override fun onStart() {
        super.onStart()
        registerReceiver(
            connectivityReceiver,
            IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
        )
        SensorManager.getInstance().registerStepCounter()
    }

    override fun onStop() {
        unregisterReceiver(connectivityReceiver)
        SensorManager.getInstance().unregisterStepCounter()
        super.onStop()
    }
}

اہم قاعدہ: onStart میں منسلک تمام وسائل onStop میں جاری کیے جانے چاہئیں۔ یہ یقینی بناتا ہے کہ جب Activity اسکرین سے چھپی ہو، تو وہ بیٹری استعمال نہ کرے، سسٹم ایونٹس نہ سنے، اور میموری نہ گھیرے۔ Android Studio میں lint قواعد ہیں جو متعلقہ ان رجسٹریشن کے بغیر BroadcastReceiver رجسٹر کرنے پر متنبہ کرتے ہیں۔

Fragment میں onStart

Fragment میں onStart کنٹینر Activity کے لائف سائیکل سے قریبی تعلق رکھتا ہے۔ Fragment کو onStart کال اس وقت ملتی ہے جب اس پر مشتمل Activity کو onStart مل چکا ہوتا ہے۔ تاہم، اگر Fragment کو تاخیری موڈ میں شامل کیا گیا ہے (addToBackStack کے بغیر FragmentTransaction.commit())، تو onStart تاخیر سے کال ہو سکتا ہے۔

kotlin
class MapFragment : Fragment() {
    private var mapView: MapView? = null

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        mapView = MapView(requireContext())
        return mapView!!
    }

    override fun onStart() {
        super.onStart()
        mapView?.onStart()
        LocationService.connect(requireContext())
    }

    override fun onStop() {
        mapView?.onStop()
        LocationService.disconnect()
        super.onStop()
    }
}

Fragment.onStart کی خصوصیت: اگر Fragment offscreenPageLimit = 1 والے ViewPager میں ہے، تو پڑوسی فریگمنٹس بھی نظر آنے سے پہلے onStart حاصل کریں گے۔ یہ قبل از وقت سننے والے رجسٹریشن کا سبب بن سکتا ہے۔ ایسے معاملات میں، setUserVisibleHint() طریقہ استعمال کریں یا صرف حقیقت میں نظر آنے والے فریگمنٹس کے لیے سننے والے رجسٹر کرنے کے لیے onStart کے اندر isVisible چیک کریں۔

onStart اور onResume میں فرق

onStart اور onResume کے درمیان بنیادی فرق اسکرین سرگرمی کی سطح ہے۔ onStart اشارہ کرتا ہے کہ Activity اسکرین پر نظر آ رہی ہے لیکن ضروری نہیں کہ پیش منظر میں ہو۔ onResume اشارہ کرتا ہے کہ Activity پیش منظر میں ہے اور اس کے پاس ان پٹ فوکس ہے۔ فرق ڈائیلاگ ونڈو کی مثال سے ظاہر ہوتا ہے: جب Activity کے اوپر Dialog ظاہر ہوتا ہے، Activity onResume کھو دیتی ہے (onPause کال ہوتا ہے) لیکن نظر آتی رہتی ہے — onStart/onStop کال نہیں ہوتے۔

موازنہ جدول واضح طور پر دکھاتا ہے کہ کن منظرناموں میں ہر طریقہ کال کیا جاتا ہے:

منظرنامہonStartonResume
ایپلیکیشن لانچکال ہوتا ہےکال ہوتا ہے
Activity کے اوپر Dialog کھلاکال نہیں ہوتاonPause (فوکس کھوتا ہے)
ہوم بٹن دبایاonStop (چھپا)onPause → onStop
حالیہ سے واپسیonStart (مرئی)onResume (فوکس)
اسکرین گھمائیonCreate → onStart→ onResume
آنے والی کالonStop (چھپا)onPause → onStop

یہ جدول ڈویلپر کو یہ فیصلہ کرنے میں مدد دیتی ہے کہ مخصوص کوڈ کس طریقہ میں رکھنا ہے۔ مثال کے طور پر، اگر ایپلیکیشن کو کسی بھی اسکرین اوورلیپ (ڈائیلاگ سمیت) پر ویڈیو پلے بیک روکنا چاہیے، تو کوڈ onPause میں رکھا جاتا ہے۔ اگر ویڈیو صرف اسکرین مکمل چھپنے پر رکنا چاہیے — کوڈ onStop میں رکھا جاتا ہے۔

سننے والوں اور خدمات کی رجسٹریشن

onStart ان سننے والوں کو رجسٹر کرنے کے لیے بہترین جگہ ہے جنہیں صرف اس وقت کام کرنا چاہیے جب Activity اسکرین پر نظر آ رہی ہو۔ یہ سسٹم کے تین اہم اجزاء سے متعلق ہے: سسٹم ایونٹس کے لیے BroadcastReceiver، جغرافیائی محل وقوع کے لیے LocationListener، اور ڈیوائس سینسرز کے لیے SensorListener۔

onStart میں BroadcastReceiver

BroadcastReceiver کو onStart میں Context.registerReceiver() کے ذریعے متحرک طور پر رجسٹر کیا جاتا ہے اور onStop میں unregisterReceiver() کے ذریعے ہٹایا جاتا ہے۔ متحرک رجسٹریشن جامد رجسٹریشن (مینی فیسٹ میں) سے بہتر ہے کیونکہ یہ وصول کنندہ کی زندگی کو Activity کی مرئیت کی مدت تک محدود کرتی ہے — جب Activity چھپی ہوتی ہے تو ایپلیکیشن سسٹم براڈکاسٹ پیغامات سے نہیں جاگتی۔

kotlin
private val batteryReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent) {
        val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
        binding?.batteryText?.text = "$level%"
    }
}

override fun onStart() {
    super.onStart()
    registerReceiver(batteryReceiver, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
}

override fun onStop() {
    unregisterReceiver(batteryReceiver)
    super.onStop()
}

LocationListener اور SensorListener

جغرافیائی محل وقوع اور سینسرز وسائل پر بھاری عمل ہیں۔ onStart میں GPS اپ ڈیٹس کی درخواست کرنا اور onStop میں منسوخ کرنا یقینی بناتا ہے کہ اسکرین چھپی ہونے پر ایپلیکیشن بیٹری ختم نہ کرے۔ باریک ترتیبات کے لیے، کم از کم وقفہ اور فاصلہ کے ساتھ requestLocationUpdates استعمال کریں — مثال کے طور پر، 10 سیکنڈ اور 10 میٹر، جو درستگی اور توانائی کی کھپت کے درمیان بہترین توازن فراہم کرتا ہے۔

اینیمیشنز اور onStart

onCreate کی بجائے onStart میں اینیمیشن شروع کرنا یقینی بناتا ہے کہ اینیمیشن ہر بار اسکرین ظاہر ہونے پر شروع ہو۔ اگر آپ onCreate میں اینیمیشن شروع کرتے ہیں، تو یہ صرف پہلی Activity تخلیق پر کام کرے گی، پس منظر سے واپسی پر نہیں۔ onStart ہر بار کال ہوتا ہے جب Activity نظر آتی ہے، جو اسے چکری اینیمیشنز اور منتقلیاں شروع کرنے کے لیے مثالی جگہ بناتا ہے۔

kotlin
private lateinit var pulseAnimator: ValueAnimator

override fun onStart() {
    super.onStart()
    pulseAnimator.start()
    binding?.loadingIndicator?.animate()?.alpha(1f)?.start()
}

override fun onStop() {
    pulseAnimator.cancel()
    binding?.loadingIndicator?.animate()?.cancel()
    super.onStop()
}

ObjectAnimator یا ValueAnimator استعمال کرنے والی اینیمیشنز کے لیے، onStop میں cancel() کال کرنا اہم ہے۔ اگر Activity چھپنے کے بعد اینیمیشن چلتی رہتی ہے، تو یہ بیکار میں GPU اور CPU وسائل استعمال کرتی ہے، جس سے آلہ کی کارکردگی بگڑتی ہے اور بیٹری ختم ہونے میں تیزی آتی ہے۔ Android Studio Profiler (GPU گراف) آپ کو فعال اینیمیشنز ٹریک کرنے اور رساو کا پتہ لگانے کی اجازت دیتا ہے۔

onStart/onStop جوڑی کا قاعدہ پیش نظارہ کے لیے کیمرہ (CameraX) کے ساتھ کام کرنے پر بھی لاگو ہوتا ہے۔ onStart میں کیمرہ کھولنا اور onStop میں بند کرنا یقینی بناتا ہے کہ جب آپ کی ایپلیکیشن اسکرین پر نظر نہیں آ رہی تو کیمرہ دوسری ایپلیکیشنز کے لیے مسدود نہ ہو۔ اس قاعدے کی خلاف ورزی Google Play پر منفی جائزوں کی ایک عام وجہ ہے۔

اکثر پوچھے گئے سوالات

سننے والوں کی رجسٹریشن کے لیے onStart اور onResume میں کیا فرق ہے؟

onStart — ان سننے والوں کے لیے جنہیں اسکرین نظر آنے تک کام کرنا چاہیے (BroadcastReceiver، LocationListener، SensorListener)۔ onResume — ان وسائل کے لیے جنہیں خصوصی رسائی درکار ہے (کیمرہ، ویڈیو کیپچر، تقریر کی شناخت)۔ سسٹم ایونٹ سننے والوں کو خصوصی رسائی کی ضرورت نہیں ہے اور وہ جزوی اوورلیپ کے ساتھ کام کر سکتے ہیں — انہیں onStart میں رجسٹر کیا جاتا ہے۔ کیمرہ صرف مکمل فوکس کے ساتھ فعال ہونا چاہیے — اسے onResume میں کھولا جاتا ہے۔

کیوں onStart کال نہیں ہو سکتا؟

onStart ہمیشہ کال ہوتا ہے اگر Activity مرئی حالت میں آتی ہے۔ onStart کے بغیر واحد منظرنامہ — Activity بنائی جاتی ہے اور فوراً ختم ہو جاتی ہے (مثلاً، onCreate میں خرابی کی وجہ سے)۔ اس صورت میں، onCreate کے فوراً بعد onDestroy کال ہوتا ہے۔ لیکن یہ ایک ہنگامی منظرنامہ ہے جو صحیح طریقے سے لکھے گئے کوڈ میں نہیں ہونا چاہیے۔

کیا onStart بغیر onResume کے کال ہو سکتا ہے؟

ہاں، onStart کو onResume نہیں مل سکتا اگر کوئی دوسرا Activity یا شفاف ونڈو فوراً Activity کے اوپر کھل جائے۔ مثال کے طور پر، اگر onCreate کے بعد ایک اجازت نامہ اسکرین لانچ کی جاتی ہے (Activity A → Activity B)، تو Activity A میں onStart کال ہوتا ہے، لیکن onResume نہیں — اسکرین B سے ھٹپ جانے پر اسے فوراً onPause → onStop ملتا ہے۔

onStart کتنی بار کال ہو سکتا ہے؟

onStart کو Activity مثال کی زندگی میں کئی بار کال کیا جا سکتا ہے۔ ہر بار جب Activity چھپی حالت (onStop) سے مرئی حالت میں آتی ہے، onStart کال ہوتا ہے۔ عملی طور پر، فعال ایپلیکیشن استعمال کے ساتھ، onStart فی سیشن درجنوں یا سینکڑوں بار کال ہو سکتا ہے۔

کیا onStart میں ڈیٹا لوڈ کرنا چاہیے؟

onStart میں ڈیٹا لوڈ کرنا مناسب ہے اگر ڈیٹا کو اسکرین ظاہر ہونے پر ہر بار اپ ڈیٹ کیا جانا چاہیے۔ مثال کے طور پر، خبروں کی فیڈ یا اطلاعوں کی فہرست۔ تاہم، لوڈنگ غیر متزامن ہونی چاہیے — lifecycleScope کے ساتھ کوروٹین کے ذریعے، UI تھریڈ کو بلاک کرنے سے بچنے کے لیے۔ ان ڈیٹا کے لیے جو اسکرین ظاہر ہونے کے درمیان تبدیل نہیں ہوتے، onCreate میں ایک بار لوڈ کرنا کافی ہے۔

خلاصہ

  • onStart — مرئی زندگی کا طریقہ؛ جب Activity یا Fragment اسکرین پر ظاہر ہوتا ہے کال ہوتا ہے
  • onStart میں رجسٹریشن — BroadcastReceiver، LocationListener، SensorListener onStart میں رجسٹر اور onStop میں ہٹائے جاتے ہیں
  • onStart بمقابلہ onResume — onStart = مرئیت، onResume = ان پٹ فوکس؛ مختلف وسائل کی اقسام کے لیے مختلف سطحیں
  • اینیمیشنز — onStart میں چکری اینیمیشن شروع کریں، onStop میں روکیں؛ GPU وسائل کے رساو کو روکتا ہے
  • Fragment.onStart — Activity.onStart سے منسلک؛ ViewPager میں پڑوسی فریگمنٹس کے لیے پیشگی کال ہوتا ہے
  • جوڑی کا قاعدہ — تمام onStart وسائل onStop میں جاری ہونے چاہئیں، ورنہ میموری اور بیٹری کا رساو
  • ڈیٹا لوڈنگ — onStart میں، وہ ڈیٹا لوڈ کریں جو اسکرین ظاہر ہونے پر ہر بار اپ ڈیٹ ہونا چاہیے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں