onRestart — जीवन चक्र में Activity को पुनर्स्थापित करना

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

onRestart — Android में Activity जीवन चक्र की एक विधि, जिसे सिस्टम द्वारा Activity के Stopped अवस्था से Started अवस्था में लौटने से पहले बुलाया जाता है। onRestart संकेत देता है कि एक Activity, जो पहले किसी अन्य स्क्रीन द्वारा छिपाई गई थी या पृष्ठभूमि में छोटी कर दी गई थी, उपयोगकर्ता के लिए फिर से दृश्यमान हो रही है। onRestart में, डेवलपर पुराने डेटा को अपडेट करता है, सूचियों को पुनः लोड करता है और UI स्थिति को पुनर्स्थापित करता है जो Activity के अदृश्य रहने के दौरान बदल सकती थी। Google Android Vitals (2025) के अनुसार, onRestart का उपयोग करके डेटा अपडेट करने वाले ऐप्स स्क्रीन पर लौटने पर 25% कम गलत जानकारी प्रदर्शित करते हैं। Android Developers दस्तावेज़ीकरण onRestart को Activity के स्क्रीन पर फिर से प्रकट होने से पहले एक प्रारंभिक चरण के रूप में वर्णित करता है।

मुख्य बिंदु

  • onRestart तब बुलाया जाता है जब Activity Stopped अवस्था से लौटती है, onStart और onResume से पहले।
  • onRestart Activity के पहली बार बनने पर नहीं बुलाया जाता — केवल छिपाए जाने के बाद पुनः दिखाए जाने पर।
  • onRestart का मुख्य उद्देश्य उस डेटा को अपडेट करना है जो Activity के अदृश्य रहने के दौरान बदल सकता था।
  • onRestart प्रक्रिया समाप्ति (process death) के दौरान नहीं बुलाया जाता — इस स्थिति में, Activity onCreate के माध्यम से पुनः बनाई जाती है।
  • onRestart का सही उपयोग मल्टीटास्किंग और ऐप्स के बीच स्विच करने के दौरान उपयोगकर्ता अनुभव को बेहतर बनाता है।

onRestart — Android जीवन चक्र में विधि का सार

onRestart — एक कॉलबैक विधि जिसे Android onStart से ठीक पहले बुलाता है जब कोई Activity अदृश्य Stopped अवस्था से वापस दृश्यमान होने पर लौटती है। यह विधि इस मायने में अद्वितीय है कि इसे केवल तभी बुलाया जाता है जब Activity पुनः दिखाई जाती है — इंस्टेंस के पहले निर्माण के दौरान, क्रम onCreate से शुरू होता है, onRestart को छोड़ते हुए। पूरा चक्र: onCreate → onStart → onResume (पहला लॉन्च) या onRestart → onStart → onResume (बाद का प्रदर्शन)।

Android सिस्टम के दृष्टिकोण से, onRestart एक अनुकूलन है जो Activity को अपनी वापसी के लिए तैयार होने देता है: रिपॉजिटरी से डेटा अपडेट करना, UI स्थिति को सिंक्रोनाइज़ करना, नेटवर्क कनेक्टिविटी की जाँच करना। onResume के विपरीत, जो हर बार Activity के फोकस प्राप्त करने पर बुलाया जाता है (डायलॉग या सिस्टम मेनू से लौटने पर भी), onRestart केवल पूर्ण छिपाने-और-वापसी चक्र के दौरान ट्रिगर होता है। यह onRestart को “भारी” अपडेट संचालन के लिए आदर्श स्थान बनाता है जो आंशिक फोकस हानि के दौरान आवश्यक नहीं होते हैं।

Android Activity जीवन चक्र विनिर्देश के अनुसार, onStop और onRestart के बीच का समय अंतराल कुछ सेकंड (उपयोगकर्ता ने जल्दी स्विच किया) से लेकर कई घंटे (ऐप पृष्ठभूमि में था और उपयोगकर्ता लौटा) तक हो सकता है। इस दौरान, दूरस्थ स्रोत (API, DB) में डेटा बदल सकता था, इसलिए onRestart ताज़गी की जाँच के लिए एक स्वाभाविक बिंदु है।

onRestart कब बुलाया जाता है: शर्तें और क्रम

onRestart केवल तब बुलाया जाता है जब Activity Stopped अवस्था से लौटती है, जिसमें Activity onStop बुलाए जाने के बाद प्रवेश करती है। नीचे वे सभी परिदृश्य दिए गए हैं जो onRestart की ओर ले जाते हैं।

onRestart आह्वान के परिदृश्य:

  • किसी अन्य Activity से लौटना — उपयोगकर्ता ने एक नई Activity खोली (जैसे, सूचना पर टैप किया) और फिर वापस नेविगेट किया (“बैक” दबाया)। स्टैक: MainActivity.onPause → MainActivity.onStop → SecondActivity बनाई जाती है → उपयोगकर्ता “बैक” दबाता है → SecondActivity.onPause → SecondActivity.onStop → SecondActivity.onDestroy → MainActivity.onRestart → MainActivity.onStart → MainActivity.onResume।
  • छोटा करने से लौटना — उपयोगकर्ता ने ऐप को छोटा किया (होम) और कुछ समय बाद लौटा। CurrentActivity.onPause → CurrentActivity.onStop → (ऐप पृष्ठभूमि में) → उपयोगकर्ता लौटता है → CurrentActivity.onRestart → CurrentActivity.onStart → CurrentActivity.onResume।
  • लॉक स्क्रीन से लौटना — लॉक स्क्रीन Activity को ढकती है; अनलॉक करने के बाद, Activity onRestart प्राप्त करती है यदि महत्वपूर्ण समय बीत चुका है (5 सेकंड से अधिक)।
  • Intent के माध्यम से लॉन्च किए गए ऐप से लौटना — कैमरा, गैलरी, ब्राउज़र — कोई भी तृतीय-पक्ष ऐप startActivityForResult() या ActivityResultLauncher के माध्यम से लॉन्च किया गया।

onRestart कब नहीं बुलाया जाता: स्क्रीन रोटेशन के दौरान (Activity नष्ट हो जाती है और onCreate के माध्यम से पुनः बनाई जाती है), डायलॉग बॉक्स से लौटने पर (Activity onStop में नहीं जाती, केवल onPause → onResume), प्रक्रिया समाप्ति के दौरान (Activity पुनः बनाई जाती है)।

onRestart बनाम onCreate: क्या चुनें

onRestart और onCreate Activity को पुनर्स्थापित करने के दो अलग-अलग दृष्टिकोण हैं। उनके बीच चुनाव इस बात पर निर्भर करता है कि Activity पूरी तरह से नष्ट हो गई थी या बस छिपा दी गई थी।

विशेषताonRestartonCreate
कब बुलाया जाता हैActivity Stopped से लौटती हैActivity पहली बार बनाई जाती है या नष्ट होने के बाद
स्थिति संरक्षितहाँ — ViewModel और फ़ील्ड जीवित हैंनहीं — सब कुछ नए सिरे से बनाया जाता है
Bundleपारित नहीं किया जातापारित किया जाता है (savedInstanceState)
विशिष्ट क्रियाएँडेटा अपडेट, UI रिफ्रेशView आरंभीकरण, LiveData सदस्यता
कॉल आवृत्तिहर बार लौटने परएक बार या नष्ट होने के बाद

चयन नियम: View आरंभीकरण और LiveData/StateFlow सदस्यता onCreate में करें (या Fragment के लिए onViewCreated में)। डेटा अपडेट, सूची पुनः लोड करना और स्थिति जाँच — onRestart में। यदि डेटा ViewModel के माध्यम से लोड किया जाता है, तो onRestart बस ViewModel पर refresh() विधि को कॉल कर सकता है, और View एक रिएक्टिव स्ट्रीम के माध्यम से अपडेट किए गए डेटा की सदस्यता लेगा।

Google अनुशंसा करता है: onRestart में onCreate के तर्क को डुप्लिकेट न करें। ViewModel में refresh() विधियाँ निकालें जो वर्तमान डेटा लोड करती हैं, और उन्हें onRestart में कॉल करें। यह साफ MVVM आर्किटेक्चर को संरक्षित करता है और कोड डुप्लिकेशन को समाप्त करता है।

onRestart के उपयोग के परिदृश्य: डेटा और UI अपडेट करना

onRestart उन संचालनों के लिए आदर्श स्थान है जो हर बार स्क्रीन पर लौटने पर किए जाने चाहिए, लेकिन पहले खोलने पर आवश्यक नहीं होते हैं। यहाँ विशिष्ट परिदृश्य दिए गए हैं:

  • DB या API से सूची अपडेट करना — उपयोगकर्ता दूसरी Activity में गया, वहाँ डेटा बदला, वापस आया — सूची अद्यतित होनी चाहिए। onRestart में viewModel.refreshItems() कॉल करें।
  • प्राधिकरण जाँच — यदि Activity लंबे समय तक छिपी हुई थी, तो एक्सेस टोकन समाप्त हो सकता है। onRestart टोकन वैधता की जाँच करने और लॉगिन स्क्रीन पर पुनर्निर्देशित करने का बिंदु है।
  • UI स्थिति सिंक्रोनाइज़ेशन — थीम स्विच करना, भाषा बदलना, सेटिंग्स अपडेट करना — स्क्रीन पर लौटने पर परिवर्तन लागू होने चाहिए।
  • मीडिया पुनः लोड — यदि Activity ऐसी सामग्री प्रदर्शित करती है जो बदल सकती है (समाचार फ़ीड, मुद्रा दरें, मौसम), तो onRestart में डेटा अपडेट करें।
  • नेटवर्क कनेक्टिविटी जाँच — ऑफ़लाइन मोड से लौटने पर, Activity को नेटवर्क उपलब्धता की जाँच करनी चाहिए और UI को स्विच करना चाहिए।
  • एनिमेशन पुनर्स्थापना — onStop में जारी किए गए एनिमेशन को onStart से पहले onRestart में पुनः प्रारंभ किया जाना चाहिए।

onRestart में क्या न करें: Views को पुनः आरंभ न करें — वे जीवित हैं क्योंकि Activity नष्ट नहीं हुई थी। LiveData की पुनः सदस्यता न लें — onCreate में सदस्यता अभी भी जीवित है। नए Fragments न बनाएँ — वे पहले से ही FragmentManager में हैं।

onRestart और प्रक्रिया समाप्ति: एक महत्वपूर्ण अपवाद

सबसे महत्वपूर्ण अपवाद: onRestart नहीं बुलाया जाता यदि ऐप प्रक्रिया सिस्टम द्वारा मार दी गई थी। यह एक महत्वपूर्ण बिंदु है जिसे डेवलपर अक्सर स्थिति पुनर्स्थापना के लिए onRestart पर भरोसा करते समय भूल जाते हैं।

प्रक्रिया समाप्ति के दौरान:

  • ऐप पृष्ठभूमि में था, Android ने मेमोरी खाली करने के लिए प्रक्रिया को मार दिया।
  • उपयोगकर्ता लौटता है — सिस्टम एक नई प्रक्रिया शुरू करता है।
  • Activity पुनः बनाई जाती है: onCreate(Bundle) → onStart → onResume
  • onRestart नहीं बुलाया जाता — सिस्टम के लिए, यह एक नया Activity इंस्टेंस है।

इससे कैसे बचें: हमेशा महत्वपूर्ण स्थिति को onSaveInstanceState(Bundle) में सहेजें (onStop से पहले बुलाया जाता है) या ViewModel में SavedStateHandle का उपयोग करें। onCreate में, savedInstanceState की जाँच करें: यदि यह null नहीं है, तो Bundle से स्थिति पुनर्स्थापित करें; यदि null है, तो नया डेटा लोड करें।

Google Android Vitals के अनुसार, पृष्ठभूमि में लंबे समय के बाद Activity में लगभग 7% वापसियाँ प्रक्रिया समाप्ति के बाद होती हैं। इसका मतलब है कि हर 15वीं Activity जिसे onRestart बुलाना चाहिए था, वास्तव में onCreate से गुज़रती है। इस परिदृश्य को अनदेखा करना “वापसी के बाद खाली स्क्रीन” बग्स के मुख्य कारणों में से एक है।

Kotlin में onRestart के साथ कोड उदाहरण

उदाहरण 1: ViewModel के माध्यम से सूची अपडेट के साथ onRestart

Activity संपादन स्क्रीन से लौटने के बाद कार्य सूची को अपडेट करने के लिए onRestart में viewModel.refreshTasks() को कॉल करती है।

kotlin
class TaskListActivity : AppCompatActivity() {
    private val viewModel: TaskViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_task_list)
        viewModel.tasks.observe(this) { tasks ->
            Log.d("TaskList", "${tasks.size} कार्य प्राप्त हुए")
        }
    }

    override fun onRestart() {
        super.onRestart()
        Log.d("TaskList", "onRestart: कार्य सूची अपडेट हो रही है")
        viewModel.refreshTasks()
    }
}

class TaskViewModel : ViewModel() {
    private val _tasks = MutableLiveData<List<Task>>()
    val tasks: LiveData<List<Task>> get() = _tasks

    fun refreshTasks() {
        viewModelScope.launch {
            _tasks.value = TaskRepository().getAllTasks()
        }
    }
}

ViewModel.refreshTasks() रिपॉजिटरी से वर्तमान डेटा लोड करता है। LiveData स्वचालित रूप से Activity को डेटा परिवर्तनों के बारे में सूचित करता है — UI बिना अतिरिक्त कोड के अपडेट होता है। onRestart एक नई सदस्यता नहीं बनाता — यह पहले से ही onCreate में स्थापित की गई थी।

उदाहरण 2: प्राधिकरण जाँच के साथ onRestart

Activity वापसी पर टोकन वैधता की जाँच करती है और यदि आवश्यक हो तो लॉगिन पर पुनर्निर्देशित करती है।

kotlin
class ProfileActivity : AppCompatActivity() {
    private val authManager = AuthManager()
    private val launcher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { Log.d("Profile", "लॉगिन स्क्रीन से लौटे") }

    override fun onRestart() {
        super.onRestart()
        if (!authManager.isTokenValid()) {
            Log.d("Profile", "टोकन समाप्त — लॉगिन पर पुनर्निर्देशित")
            launcher.launch(Intent(this, LoginActivity::class.java))
        }
    }
}

class AuthManager {
    fun isTokenValid(): Boolean {
        val expiry = SharedPreferencesManager().getTokenExpiry()
        return System.currentTimeMillis() < expiry
    }
}

यदि उपयोगकर्ता ने ऐप को लंबे समय तक छोटा किया और टोकन समाप्त होने के बाद लौटा, तो onRestart उन्हें लॉगिन स्क्रीन पर पुनर्निर्देशित करेगा। यह समाप्त टोकन के साथ अनुरोध करने का प्रयास करते समय API त्रुटियों को रोकता है। ध्यान दें: जाँच onRestart में है, onResume में नहीं, डायलॉग से लौटने पर अनावश्यक जाँच से बचने के लिए।

उदाहरण 3: ViewLifecycleOwner के साथ Fragment में onRestart

Fragment डेटा अपडेट करने के लिए LifecycleObserver के माध्यम से onRestart का उपयोग करता है।

kotlin
class FeedFragment : Fragment() {
    private val viewModel: FeedViewModel by viewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewLifecycleOwner.lifecycle.addObserver(object : LifecycleObserver {
            @OnLifecycleEvent(Lifecycle.Event.ON_RESTART)
            fun onRestart() {
                Log.d("FeedFragment", "LifecycleObserver के माध्यम से onRestart")
                viewModel.refreshFeed()
            }
        })
    }
}

Fragment में onRestart को ओवरराइड करने के बजाय, LifecycleObserver का उपयोग किया जाता है — एक अधिक लचीला दृष्टिकोण जो बिना इनहेरिटेंस के जीवन चक्र ईवेंट तर्क जोड़ने की अनुमति देता है। ViewLifecycleOwner सुनिश्चित करता है कि observer View स्कोप के भीतर रहता है (यह onDestroyView से आगे नहीं रहता)।

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

onRestart onResume से कैसे अलग है?

onResume हर बार बुलाया जाता है जब Activity फोकस प्राप्त करती है — जिसमें डायलॉग या सिस्टम मेनू से लौटना भी शामिल है (Activity onStop में नहीं गई थी)। onRestart केवल Stopped अवस्था से लौटने पर बुलाया जाता है, जब Activity पूरी तरह से छिपी हुई थी। onRestart “भारी” अपडेट के लिए एक संकीर्ण घटना है, जबकि onResume हल्के संचालन (शीर्षक बदलना, समय अपडेट करना) के लिए है।

क्या onRestart को onStop के बिना बुलाया जा सकता है?

नहीं, नहीं किया जा सकता। onRestart onStop के साथ एक युग्मित विधि है: onRestart केवल तभी बुलाया जाता है जब Activity onStop से गुज़री हो। यदि Activity onStop में नहीं गई (जैसे, कोई डायलॉग बॉक्स खोला गया था), तो वापसी पर onRestart नहीं बुलाया जाता — केवल onResume।

एमुलेटर में onRestart कैसे अनुकरण करें?

एमुलेटर में Home (घर बटन) दबाएँ — Activity छोटी हो जाएगी और onStop प्राप्त करेगी। फिर हाल के ऐप्स या लॉन्चर के माध्यम से ऐप खोलें — Activity onRestart → onStart → onResume प्राप्त करेगी। डीबगिंग के लिए, onRestart में ब्रेकपॉइंट के साथ Debug या Activity टैग के साथ Log.d का उपयोग करें।

यदि onRestart में अपवाद फेंका जाए तो क्या होता है?

onRestart में एक अनकैच अपवाद Force Close का कारण बनेगा। सिस्टम जीवन चक्र कॉलबैक में अपवादों को नहीं पकड़ता। यदि onRestart ऐसे संचालन करता है जो अपवाद फेंक सकते हैं (बिना try-catch के नेटवर्क अनुरोध, null View के साथ काम करना), तो उन्हें try-catch में लपेटें।

क्या मुझे onRestart में isFinishing() की जाँच करने की आवश्यकता है?

नहीं। onRestart केवल जीवित Activities के लिए बुलाया जाता है जो Stopped अवस्था से लौट रही हैं। onRestart में isFinishing() हमेशा false होगा। isFinishing() की जाँच onPause (डेटा सहेजना) और onDestroy (पुनर्निर्माण को finish() से अलग करना) में समझ में आती है।

सारांश

  • onRestart — एक जीवन चक्र विधि जो Activity के Stopped अवस्था से लौटने पर बुलाई जाती है, onStart और onResume से पहले।
  • onRestart Activity के पहली बार बनने पर नहीं बुलाया जाता — केवल पूरी तरह से छिपाए जाने के बाद पुनः दिखाए जाने पर।
  • onRestart का मुख्य उद्देश्य पुराने डेटा को अपडेट करना और स्थिति की जाँच करना है (टोकन, नेटवर्क, सेटिंग्स)।
  • onRestart प्रक्रिया समाप्ति के दौरान नहीं बुलाया जाता — प्रक्रिया समाप्ति के बाद पुनर्स्थापना के लिए Bundle के साथ onCreate का उपयोग करें।
  • onRestart में onCreate के तर्क को डुप्लिकेट न करें: आरंभीकरण onCreate में करें, अपडेट onRestart में।
  • Fragment के लिए, onRestart को ओवरराइड करने के बजाय viewLifecycleOwner पर LifecycleObserver का उपयोग करें।
  • onRestart का सही कार्यान्वयन मल्टीटास्किंग के दौरान UX में सुधार करता है और पुराने डेटा के प्रदर्शन को रोकता है।

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

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

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

यह भी पढ़ें