onResume — मूल बातें, एंड्रॉइड में उपयोगकर्ता के साथ बातचीत

लेखक: IT Sectr प्रकाशित: 2026-03-04 पढ़ने का समय: 10 मिनट

onResume एंड्रॉइड जीवनचक्र की एक विधि है जो तब कॉल की जाती है जब Activity या Fragment अग्रभाग में आता है और इनपुट फ़ोकस प्राप्त करता है। इस अवस्था में, स्क्रीन उपयोगकर्ता के साथ बातचीत के लिए तैयार होती है: सभी स्पर्श ईवेंट, कुंजी प्रेस और जेस्चर इस घटक को निर्देशित किए जाते हैं। onResume Activity की कार्यशील अवस्था है, जहाँ एप्लिकेशन अपना अधिकांश समय बिताता है। यहीं पर कैमरा खोला जाता है, वीडियो प्लेबैक शुरू किया जाता है, वाक् पहचान शुरू की जाती है, और सेंसर श्रोता पंजीकृत किए जाते हैं जिन्हें विशेष पहुँच की आवश्यकता होती है। पूर्ण Activity जीवनचक्र के बारे में अधिक जानकारी के लिए, लेख पढ़ें Activity Lifecycle.

मुख्य बिंदु

  • onResume — इनपुट फ़ोकस के साथ अग्रभाग में Activity; onStart के बाद या डायलॉग से वापस आने पर कॉल किया जाता है
  • विशेष संसाधन — कैमरा, माइक्रोफ़ोन, वीडियो कैप्चर onResume में खोले जाते हैं और onPause में बंद किए जाते हैं
  • onResume/onPause युग्म — पूर्ण फ़ोकस की आवश्यकता वाले संसाधन इस युग्म द्वारा प्रबंधित किए जाते हैं; onResume में पंजीकृत, onPause में मुक्त
  • onResume बनाम onStart — onStart = दृश्यता, onResume = बातचीत; डायलॉग onResume को ओवरराइड करता है लेकिन onStart को नहीं
  • समय — onResume तेज़ होना चाहिए; यहाँ लंबी संक्रियाएँ इंटरफ़ेस प्रतिक्रिया में देरी करती हैं
  • Fragment.onResume — Activity.onResume के बाद कॉल किया जाता है, जब Fragment बातचीत के लिए तैयार होता है
  • Jetpack में onResume — lifecycleScope और LiveData स्वचालित सदस्यता प्रबंधन के लिए onResume का उपयोग करते हैं

एंड्रॉइड में onResume विधि की मूल बातें

onResume — Activity जीवनचक्र की तीसरी विधि, onStart के बाद कॉल की जाती है, जो संकेत देती है कि स्क्रीन उपयोगकर्ता के साथ पूर्ण बातचीत के लिए तैयार है। इस क्षण में, Activity बैक स्टैक के शीर्ष पर होती है, सिस्टम उसे सभी इनपुट ईवेंट निर्देशित करता है, और एप्लिकेशन उपयोगकर्ता की सक्रिय भागीदारी की आवश्यकता वाले किसी भी संचालन को शुरू कर सकता है: वीडियो कॉल, गेम, ऑडियो रिकॉर्डिंग, Canvas पर ड्राइंग।

onResume “अग्रभाग जीवनकाल” (foreground lifetime) का हिस्सा है — onResume और onPause के बीच का अंतराल। यह Activity की सबसे सक्रिय अवधि है, जब एप्लिकेशन सबसे अधिक संसाधनों का उपभोग करता है: स्पर्श प्रसंस्करण के लिए CPU, एनिमेशन रेंडरिंग के लिए GPU, वीडियो कैप्चर के लिए कैमरा और माइक्रोफ़ोन। जीवनचक्र के इस स्तर को समझना ऊर्जा खपत के अनुकूलन के लिए महत्वपूर्ण है — onResume में खोले गए संसाधनों को onPause में तुरंत बंद किया जाना चाहिए।

Google I/O 2025 के अनुसार, प्रति सत्र Activity द्वारा onResume अवस्था में बिताया गया औसत समय समाचार एप्लिकेशन के लिए 2–5 मिनट और गेम और मैसेजिंग ऐप के लिए 15–30 मिनट है। शेष समय Activity onPause, onStop या onDestroy अवस्थाओं में होती है। इसका मतलब है कि विशेष रूप से onResume कोड को अनुकूलित करने से प्रदर्शन और बैटरी जीवन में सबसे बड़ा लाभ मिलता है।

Activity में onResume

Activity में, onResume विधि हर बार कॉल की जाती है जब स्क्रीन इनपुट फ़ोकस प्राप्त करती है — पहली बार लॉन्च करने पर, दूसरी Activity से वापस आने पर, डायलॉग बंद करने पर, डिवाइस अनलॉक करने पर। यह एक “हॉट” विधि है जिसे प्रति सत्र कई बार कॉल किया जा सकता है, और इसका कार्यान्वयन जितना संभव हो उतना हल्का होना चाहिए।

kotlin
class CameraActivity : AppCompatActivity() {
    private var cameraProvider: ProcessCameraProvider? = null
    private var preview: Preview? = null

    override fun onResume() {
        super.onResume()
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
        cameraProviderFuture.addListener({
            cameraProvider = cameraProviderFuture.get()
            val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
            preview = Preview.Builder().build().also {
                it.setSurfaceProvider(binding?.viewFinder?.surfaceProvider)
            }
            try {
                cameraProvider?.unbindAll()
                cameraProvider?.bindToLifecycle(
                    this, cameraSelector, preview
                )
            } catch (e: Exception) {
                Log.e("Camera", "Failed to bind camera", e)
            }
        }, ContextCompact.getMainExecutor(this))
    }

    override fun onPause() {
        super.onPause()
        cameraProvider?.unbindAll()
        preview = null
    }
}

CameraX उदाहरण onResume/onPause के क्लासिक उपयोग को दर्शाता है: कैमरा एक विशेष संसाधन है जिसे एक समय में केवल एक एप्लिकेशन उपयोग कर सकता है। bindToLifecycle के माध्यम से कैमरे को जीवनचक्र से बांधना onPause में कैमरे को स्वचालित रूप से बंद कर देता है, लेकिन स्पष्ट unbindAll कॉल तत्काल मुक्ति की गारंटी देता है। यह विशेष रूप से Activities के बीच स्विच करते समय महत्वपूर्ण है: कैमरे को दूसरी Activity द्वारा खोलने का प्रयास करने से पहले मुक्त किया जाना चाहिए।

Fragment में onResume

Fragment में onResume उस Activity के onResume प्राप्त करने के बाद कॉल किया जाता है जिसमें वह शामिल है। हालांकि, FragmentManager और ViewPager की विशेषताओं के कारण, Fragment के लिए onResume कॉल का समय Activity के सापेक्ष विलंबित हो सकता है। उदाहरण के लिए, offscreenPageLimit = 1 वाले ViewPager में Fragment को onResume तभी मिलता है जब वह वर्तमान पृष्ठ बनता है, Activity शुरू होने पर नहीं।

kotlin
class VideoPlayerFragment : Fragment() {
    private var exoPlayer: ExoPlayer? = null

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        exoPlayer = ExoPlayer.Builder(requireContext()).build()
        binding?.playerView?.player = exoPlayer
    }

    override fun onResume() {
        super.onResume()
        exoPlayer?.play()
        if (userVisibleHint) {
            startBiometricAuth()
        }
    }

    override fun onPause() {
        exoPlayer?.pause()
        stopBiometricAuth()
        super.onPause()
    }
}

Fragment.onResume में userVisibleHint जाँच ViewPager के लिए प्रासंगिक है: Fragment को onResume मिल सकता है लेकिन वह पड़ोसी पृष्ठ द्वारा छिपा हो सकता है (उदाहरण के लिए, एनिमेटेड संक्रमण के दौरान)। ऐसे मामलों में, दृश्यता जाँच के बिना onResume में वीडियो या बायोमेट्रिक्स शुरू करने से अप्रत्याशित व्यवहार होगा। Fragment 1.5.0 से, ViewPager2 में फ़्रैगमेंट जीवनचक्र के सटीक नियंत्रण के लिए FragmentTransaction.setMaxLifecycle() का उपयोग करने की अनुशंसा की जाती है।

onResume बनाम onStart: कब क्या उपयोग करें

डेवलपर्स अक्सर onStart और onResume को भ्रमित करते हैं, कोड को गलत विधि में रखते हैं। मुख्य नियम: onStart — उन संसाधनों के लिए जो दृश्यता के दौरान काम करते हैं; onResume — उन संसाधनों के लिए जिन्हें इनपुट फ़ोकस की आवश्यकता होती है। आइए विशिष्ट परिदृश्यों और सही विधि चयन को देखें।

संक्रियाविधितर्क
भौगोलिक स्थान सदस्यताonStart / onStopGPS आंशिक दृश्यता पर काम कर सकता है
कैमरा खोलनाonResume / onPauseकैमरा एक विशेष संसाधन है
BroadcastReceiveronStart / onStopसिस्टम ईवेंट को फ़ोकस की आवश्यकता नहीं है
वीडियो प्लेबैकonResume / onPauseवीडियो उपयोगकर्ता को दिखाई देना चाहिए
Bluetooth स्कैनिंगonStart / onStopस्कैनिंग पृष्ठभूमि में चल सकती है
वॉयस रिकॉर्डर (MediaRecorder)onResume / onPauseरिकॉर्डिंग के लिए सक्रिय UI आवश्यक है
सेंसर श्रोताonResume / onPauseगेम और जेस्चर के लिए सेंसर
डेटा अद्यतनonStartप्रकट होने पर ताज़ा डेटा आवश्यक

एक व्यावहारिक नियम: यदि कोई संक्रिया डायलॉग प्रकट होने पर बाधित होनी चाहिए — onResume/onPause का उपयोग करें। यदि कोई संक्रिया स्क्रीन के आंशिक रूप से ढके होने पर जारी रह सकती है — onStart/onStop का उपयोग करें। उदाहरण के लिए, वीडियो प्लेयर को डायलॉग खुलने पर वीडियो रोकना चाहिए (onPause), जबकि भौगोलिक स्थान अद्यतन जारी रख सकता है (onStart में रहता है)।

विशेष संसाधनों का प्रबंधन

विशेष संसाधन डिवाइस के ऐसे घटक हैं जिनका उपयोग एक समय में केवल एक एप्लिकेशन कर सकता है। कैमरा, माइक्रोफ़ोन, वीडियो आउटपुट (MediaProjection), रीड मोड में NFC एडाप्टर, एक्सेसरी मोड में USB डिवाइस — इन सभी संसाधनों को onResume में खोला जाना चाहिए और onPause में मुक्त किया जाना चाहिए।

MediaRecorder के साथ कार्य करना

MediaRecorder का उपयोग ऑडियो और वीडियो रिकॉर्ड करने के लिए किया जाता है। अनुमति अनुरोध और MediaRecorder की तैयारी onCreate में की जाती है, जबकि रिकॉर्डिंग onResume में शुरू होती है। यदि उपयोगकर्ता किसी अन्य एप्लिकेशन पर स्विच करता है, तो onPause रिकॉर्डिंग रोकता है, और onResume इसे फिर से शुरू करता है। यह वॉयस रिकॉर्डर और वीडियो रिकॉर्डिंग एप्लिकेशन के लिए मानक व्यवहार है।

kotlin
private var mediaRecorder: MediaRecorder? = null
private var isRecording = false

override fun onResume() {
    super.onResume()
    if (isRecording) {
        mediaRecorder?.resume()
    }
}

override fun onPause() {
    if (isRecording) {
        mediaRecorder?.pause()
    }
    super.onPause()
}

BiometricPrompt और onResume

बायोमेट्रिक प्रमाणीकरण (BiometricPrompt) को केवल तभी कॉल किया जाना चाहिए जब Activity onResume में हो। यदि इसे onCreate या onStart में कॉल किया जाता है, तो बायोमेट्री डायलॉग Activity के आरंभीकरण पूरा करने से पहले प्रकट हो सकता है, जिससे परिणाम का गलत प्रसंस्करण हो सकता है। onResume में कॉल करना सुनिश्चित करता है कि बायोमेट्री विंडो सही संदर्भ में दिखाई जाए।

पैटर्न और सुझाव

आइए वाणिज्यिक परियोजनाओं में उपयोग किए जाने वाले onResume के साथ कार्य करने के तीन सिद्ध पैटर्न देखें: निष्क्रियता टाइमर रीसेट, दृश्य डेटा अद्यतन, और Jetpack Navigation के साथ एकीकरण।

निष्क्रियता टाइमर रीसेट

संवेदनशील डेटा वाले एप्लिकेशन (बैंकिंग, मेडिकल रिकॉर्ड) में, onResume का उपयोग स्वचालित लॉगआउट टाइमर रीसेट करने के लिए किया जाता है। यदि उपयोगकर्ता सक्रिय रूप से एप्लिकेशन के साथ बातचीत कर रहा है, तो onResume प्रत्येक स्क्रीन संक्रमण पर कॉल किया जाता है, और टाइमर रीसेट हो जाता है। यदि उपयोगकर्ता एप्लिकेशन को छोटा करता है, तो onPause टाइमर रोक देता है, और वापस लौटने पर onResume या तो इसे रीसेट करता है या पुनः प्रमाणीकरण का अनुरोध करता है।

वापसी पर डेटा अद्यतन

एक सूची जो हर बार स्क्रीन पर वापस आने पर अद्यतन डेटा प्रदर्शित करनी चाहिए, onResume में अद्यतन की जाती है। उदाहरण के लिए, यदि उपयोगकर्ता ने किसी अन्य Activity में एक नई प्रविष्टि बनाई और वापस नेविगेट किया, तो onResume स्थानीय डेटाबेस या ViewModel कैश से सूची पुनः लोड करता है। यह मैन्युअल notifyDataSetChanged कॉल के बिना डेटा स्थिरता सुनिश्चित करता है।

kotlin
override fun onResume() {
    super.onResume()
    // ActivityResultLauncher ने परिणाम लौटाया — सूची अद्यतन कर रहा है
    viewModel.refreshList()
    // निष्क्रियता टाइमर रीसेट
    inactivityTimer.reset()
}

Jetpack Navigation और onResume

Jetpack Navigation में, फ़्रैगमेंट का onResume हर बार कॉल किया जाता है जब आप बैक नेविगेशन के माध्यम से उस पर लौटते हैं। इस गुण का उपयोग UI स्थिति रीसेट करने के लिए किया जाता है: कीबोर्ड छिपाना, खोज फ़ील्ड साफ़ करना, टूलबार शीर्षक अद्यतन करना। OnBackPressedCallback onResume के साथ संयोजन में कोड दोहराव के बिना नेविगेशन पर पूर्ण नियंत्रण देता है।

अक्सर पूछे जाने वाले प्रश्न

onResume और onStart के बीच सरल शब्दों में क्या अंतर है?

onStart — स्क्रीन दिखाई देती है। onResume — स्क्रीन सक्रिय और बातचीत के लिए तैयार है। कल्पना करें: आप टीवी देख रहे हैं (onStart), लेकिन आप रिमोट उठाते हैं (onResume)। टीवी हमेशा दिखाई देता है, लेकिन बातचीत केवल रिमोट से शुरू होती है। यदि कोई टीवी को पर्दे से ढक देता है — स्क्रीन दिखाई देना बंद हो जाती है (onStop)। यदि कोई आपसे रिमोट ले लेता है — बातचीत बंद हो जाती है (onPause), लेकिन टीवी अभी भी दिखाई देता है।

onResume कितनी बार कॉल किया जाता है?

onResume हर बार कॉल किया जाता है जब Activity इनपुट फ़ोकस प्राप्त करती है। न्यूनतम एक बार (लॉन्च पर)। अधिकतम उपयोग परिदृश्यों पर निर्भर करता है: स्क्रीन के बीच स्विच करना, डायलॉग खोलना, डिवाइस को तेज़ी से लॉक और अनलॉक करना — ऐसा प्रत्येक परिदृश्य स्क्रीन पर वापस आने पर onResume कॉल करता है।

onResume कैमरा खोलने के लिए सबसे अच्छी जगह क्यों है?

कैमरा एक विशेष संसाधन है जो एक समय में केवल एक एप्लिकेशन के लिए उपलब्ध है। यदि आप onCreate या onStart में कैमरा खोलते हैं, तो यह अन्य एप्लिकेशन के लिए तब भी लॉक रहेगा जब आपका एप्लिकेशन निष्क्रिय हो। onResume गारंटी देता है कि कैमरा केवल तभी खुला है जब Activity अग्रभाग में है, और onPause इसे तुरंत बंद कर देता है। यह एंड्रॉइड विकास का एक मानक है, जो CameraX और Camera2 API दस्तावेज़ीकरण में स्थापित है।

क्या onStart के बाद onResume कॉल नहीं हो सकता?

हाँ, onResume नहीं हो सकता है यदि किसी Activity को प्रकट होने के तुरंत बाद दूसरी Activity द्वारा ढक दिया जाता है। उदाहरण के लिए, Activity A, onCreate या onStart विधि में Activity B शुरू करती है। इस मामले में, A को onStart → onPause → onStop प्राप्त होता है, onResume को छोड़ते हुए। सिस्टम onResume कॉल नहीं करता क्योंकि Activity A को कभी इनपुट फ़ोकस नहीं मिला।

onResume में क्या नहीं करना चाहिए?

onResume में, लंबी सिंक्रोनस संक्रियाएँ नहीं करनी चाहिए: नेटवर्क से बड़ा डेटा लोड करना, जटिल SQL क्वेरी, इमेज प्रोसेसिंग। onResume UI थ्रेड पर चलता है, और 100–200 मिलीसेकंड से अधिक का कोई भी ब्लॉकिंग इंटरफ़ेस प्रतिक्रिया में देरी का कारण बनता है। सभी भारी संक्रियाएँ एसिंक्रोनस होनी चाहिए — coroutines, RxJava या WorkManager के माध्यम से। बिना जाँच के onResume में finish() कॉल करने की भी अनुशंसा नहीं की जाती है — इससे पुनर्निर्माण का अनंत लूप हो सकता है।

सारांश

  • onResume — इनपुट फ़ोकस के साथ अग्रभाग अवस्था; Activity उपयोगकर्ता के साथ बातचीत के लिए तैयार है
  • विशेष संसाधन — कैमरा, माइक्रोफ़ोन, वीडियो कैप्चर onResume में खोले जाते हैं और onPause में बंद किए जाते हैं
  • onResume बनाम onStart — onStart दृश्य संसाधनों के लिए, onResume सक्रिय संसाधनों के लिए; डायलॉग onResume को बाधित करता है लेकिन onStart को नहीं
  • प्रदर्शन — onResume हल्का होना चाहिए; सभी भारी संक्रियाएँ एसिंक्रोनस
  • Fragment.onResume — ViewPager में दृश्यता पर निर्भर करता है; userVisibleHint जाँचें या setMaxLifecycle उपयोग करें
  • विशिष्ट कार्य — टाइमर रीसेट, वापसी पर डेटा अद्यतन, BiometricPrompt प्रबंधन
  • onResume/onPause युग्म — विशेष पहुँच वाले संसाधन केवल इस युग्म द्वारा प्रबंधित किए जाते हैं

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें