onRestart — mohiyati, Activity-ni hayotiy siklda tiklash

Muallif: IT Sectr Nashr etilgan: 2026-03-04 O'qish vaqti: 8 daq

onRestart — Android-dagi Activity hayotiy sikli usuli boʻlib, tizim tomonidan Activity-ning Stopped holatidan Started holatiga qaytishidan oldin chaqiriladi. onRestart ilgari boshqa ekran tomonidan yashirilgan yoki fonga tushirilgan Activity foydalanuvchi uchun yana koʻrinadigan boʻlishini bildiradi. onRestart-da dasturchi eskirgan maʼlumotlarni yangilaydi, roʻyxatlarni qayta yuklaydi va Activity koʻrinmas boʻlgan vaqtda oʻzgargan boʻlishi mumkin boʻlgan UI holatini tiklaydi. Google Android Vitals (2025) maʼlumotlariga koʻra, onRestart-dan maʼlumotlarni yangilash uchun foydalanadigan ilovalar ekranga qaytganda 25% kamroq notoʻgʻri maʼlumot koʻrsatish holatlarini namoyish etadi. Android Developers hujjatlari onRestart-ni Activity ekranda qayta paydo boʻlishidan oldingi tayyorgarlik bosqichi sifatida tavsiflaydi.

Asosiy maʼlumotlar

  • onRestart Activity Stopped holatidan qaytganda, onStart va onResume-dan oldin chaqiriladi.
  • onRestart Activity-ni birinchi yaratishda chaqirilmaydi — faqat yashirishdan keyin qayta koʻrsatishda.
  • onRestart-ning asosiy vazifasi Activity koʻrinmas boʻlgan vaqtda oʻzgargan boʻlishi mumkin boʻlgan maʼlumotlarni yangilashdir.
  • onRestart process death vaqtida chaqirilmaydi — bu holda Activity onCreate orqali qayta yaratiladi.
  • onRestart-dan toʻgʻri foydalanish koʻp vazifalilik va ilovalar oʻrtasida almashishda foydalanuvchi tajribasini yaxshilaydi.

onRestart — Android hayotiy siklida usulning mohiyati

onRestart — Android Activity koʻrinmas Stopped holatidan qaytib koʻrinadigan holatga oʻtganda, onStart-dan oldin chaqiradigan callback usulidir. Bu usul noyobdir, chunki u faqat Activity-ni qayta koʻrsatishda chaqiriladi — birinchi instansiya yaratishda ketma-ketlik onRestart-ni chetlab oʻtib, onCreate bilan boshlanadi. Toʻliq sikl: onCreate → onStart → onResume (birinchi ishga tushirish) yoki onRestart → onStart → onResume (qayta koʻrsatish).

Android tizimi nuqtai nazaridan onRestart Activity-ning qaytishga tayyorlanishiga imkon beruvchi optimallashtirishdir: repozitoriydan maʼlumotlarni yangilash, UI holatini sinxronlash, tarmoq ulanishini tekshirish. Fokus olganda har safar chaqiriladigan onResume-dan farqli oʻlaroq (shu jumladan dialog yoki tizim menyusidan qaytganda), onRestart faqat toʻliq yashirish-qaytish siklida ishga tushadi. Bu onRestart-ni qisman fokus yoʻqotishda kerak boʻlmagan „ogʻir“ yangilash operatsiyalari uchun ideal joyga aylantiradi.

Android Activity hayotiy sikli spetsifikatsiyasiga koʻra, onStop va onRestart oʻrtasidagi vaqt oraligʻi bir necha soniyadan (foydalanuvchi tez almashdi) bir necha soatgacha (ilova fonda edi va foydalanuvchi qaytdi) oʻzgarishi mumkin. Bu vaqt davomida uzoq manbadagi (API, DB) maʼlumotlar oʻzgargan boʻlishi mumkin, shuning uchun onRestart dolzarblikni tekshirish uchun tabiiy nuqtadir.

onRestart qachon chaqiriladi: shartlar va ketma-ketlik

onRestart faqat Activity-ning Stopped holatidan qaytishida chaqiriladi, Activity onStop chaqirilgandan soʻng Stopped holatiga oʻtadi. Quyida onRestart-ga olib keladigan barcha stsenariylar keltirilgan.

onRestart chaqirilish stsenariylari:

  • Boshqa Activity-dan qaytish — foydalanuvchi yangi Activity ochdi (masalan, bildirishnomaga bosdi) va keyin orqaga qaytdi („Orqaga“ tugmasini bosdi). Stack: MainActivity.onPause → MainActivity.onStop → SecondActivity yaratiladi → foydalanuvchi „Orqaga“ bosadi → SecondActivity.onPause → SecondActivity.onStop → SecondActivity.onDestroy → MainActivity.onRestart → MainActivity.onStart → MainActivity.onResume.
  • Kichraytirishdan qaytish — foydalanuvchi ilovani kichraytirdi (Home) va bir muncha vaqt oʻtgach qaytdi. CurrentActivity.onPause → CurrentActivity.onStop → (ilova fonda) → foydalanuvchi qaytadi → CurrentActivity.onRestart → CurrentActivity.onStart → CurrentActivity.onResume.
  • Blok ekranidan qaytish — blok ekrani Activity-ni yopadi; blok ochilgandan soʻng Activity onRestart oladi, agar sezilarli vaqt oʻtgan boʻlsa (5 soniyadan koʻp).
  • Intent orqali ishga tushirilgan ilovadan qaytish — kamera, galereya, brauzer — startActivityForResult() yoki ActivityResultLauncher orqali ishga tushirilgan har qanday uchinchi tomon ilovasi.

onRestart qachon chaqirilmaydi: ekran aylantirishda (Activity yoʻq qilinadi va onCreate orqali qayta yaratiladi), dialog oynasidan qaytishda (Activity onStop-ga bormaydi, faqat onPause → onResume), process death vaqtida (Activity qayta yaratiladi).

onRestart va onCreate oʻrtasidagi farq: nimani tanlash

onRestart va onCreate Activity-ni tiklashga ikki xil yondashuvdir. Ularning oʻrtasida tanlov Activity butunlay yoʻq qilinganmi yoki shunchaki yashirilganmi, bunga bogʻliq.

XususiyatonRestartonCreate
Qachon chaqiriladiActivity Stopped-dan qaytadiActivity birinchi marta yoki yoʻq qilingandan keyin yaratiladi
Holat saqlanganHa — ViewModel va maydonlar tirikYoʻq — hamma narsa qayta yaratiladi
BundleUzatilmaydiUzatiladi (savedInstanceState)
Oddiy harakatlarMaʼlumot yangilash, UI yangilashView-ni ishga tushirish, LiveData-ga obuna
Chaqirilish chastotasiHar bir qaytishdaBir marta yoki yoʻq qilingandan keyin

Tanlov qoidasi: View-ni ishga tushirish va LiveData/StateFlow-ga obunani onCreate-da (yoki Fragment uchun onViewCreated-da) bajaring. Maʼlumot yangilash, roʻyxatlarni qayta yuklash va holatni tekshirishni — onRestart-da. Agar maʼlumotlar ViewModel orqali yuklansa, onRestart shunchaki ViewModel-da refresh() usulini chaqirishi mumkin, View esa reaktiv oqim orqali yangilangan maʼlumotlarga obuna boʻladi.

Google tavsiya qiladi: onCreate mantiqini onRestart-da takrorlamang. ViewModel-da joriy maʼlumotlarni yuklaydigan refresh() usullarini ajrating va ularni onRestart-da chaqiring. Bu MVVM arxitekturasining tozaligini saqlaydi va kod takrorlanishini bartaraf etadi.

onRestart foydalanish stsenariylari: maʼlumot va UI yangilash

onRestart — ekranga har bir qaytishda bajarilishi kerak boʻlgan, lekin birinchi ochilishda kerak boʻlmagan operatsiyalar uchun ideal joy. Oddiy stsenariylar:

  • DB yoki API-dan roʻyxatni yangilash — foydalanuvchi boshqa Activity-ga ketdi, u yerda maʼlumotlarni oʻzgartirdi, qaytdi — roʻyxat dolzarb boʻlishi kerak. onRestart-da viewModel.refreshItems() ni chaqiring.
  • Avtorizatsiyani tekshirish — Activity uzoq vaqt yashirin boʻlsa, kirish tokenining muddati oʻtgan boʻlishi mumkin. onRestart tokenning haqiqiyligini tekshirish va kirish ekraniga yoʻnaltirish nuqtasidir.
  • UI holatini sinxronlash — mavzuni almashtirish, tilni oʻzgartirish, sozlamalarni yangilash — oʻzgarishlar ekranga qaytganda qoʻllanilishi kerak.
  • Media-ni qayta yuklash — Activity oʻzgarishi mumkin boʻlgan kontentni koʻrsatsa (yangiliklar lentasi, valyuta kursi, ob-havo), onRestart-da maʼlumotlarni yangilang.
  • Tarmoq ulanishini tekshirish — oflayn rejimdan qaytganda, Activity tarmoq mavjudligini tekshirishi va UI-ni oʻzgartirishi kerak.
  • Animatsiyalarni tiklash — onStop-da boʻshatilgan animatsiyalarni onStart-dan oldin onRestart-da qayta ishga tushiring.

onRestart-da nima qilmaslik kerak: View-larni qayta ishga tushirmang — ular tirik, chunki Activity yoʻq qilinmagan. LiveData-ga qayta obuna boʻlmang — obuna onCreate-da tirik. Yangi fragmentlar yaratmang — ular allaqachon FragmentManager-da.

onRestart va process death: muhim istisno

Eng muhim istisno: onRestart tizim tomonidan ilova jarayoni oʻldirilganda chaqirilmaydi. Bu dasturchilar koʻpincha holatni tiklash uchun onRestart-ga tayanib, eʼtibordan chetda qoldiradigan asosiy nuqtadir.

Process death vaqtida:

  • Ilova fonda edi, Android xotirani boʻshatish uchun jarayonni oʻldirdi.
  • Foydalanuvchi qaytadi — tizim yangi jarayonni ishga tushiradi.
  • Activity qayta yaratiladi: onCreate(Bundle) → onStart → onResume.
  • onRestart chaqirilmaydi — tizim uchun bu yangi Activity instansiyasi.

Bundan qanday himoyalanish: muhim holatni har doim onSaveInstanceState(Bundle) da saqlang (onStop-dan oldin chaqiriladi) yoki ViewModel-da SavedStateHandle dan foydalaning. onCreate-da savedInstanceState-ni tekshiring: agar null boʻlmasa, holatni Bundle-dan tiklang, agar null boʻlsa — yangi maʼlumotlarni yuklang.

Google Android Vitals-ga koʻra, fonda uzoq vaqt qolgandan keyin Activity-ga qaytishlarning taxminan 7% process death-dan keyin sodir boʻladi. Bu onRestart-ni chaqirishi kerak boʻlgan har 15- Activity aslida onCreate-dan oʻtishini anglatadi. Ushbu stsenariyni eʼtiborsiz qoldirish „qaytgandan keyin boʻsh ekran“ xatolarining asosiy sabablaridan biridir.

Kotlin-da onRestart bilan kod misollari

Misol 1: ViewModel orqali roʻyxat yangilash bilan onRestart

Activity tahrirlash ekranidan qaytgandan keyin vazifalar roʻyxatini yangilash uchun onRestart-da viewModel.refreshTasks() ni chaqiradi.

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} ta vazifa olindi")
        }
    }

    override fun onRestart() {
        super.onRestart()
        Log.d("TaskList", "onRestart: vazifalar roʻyxatini yangilash")
        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() repozitoriydan joriy maʼlumotlarni yuklaydi. LiveData avtomatik ravishda Activity-ni maʼlumot oʻzgarishi haqida xabardor qiladi — UI qoʻshimcha kodlarsiz yangilanadi. OnRestart yangi obuna yaratmaydi — u allaqachon onCreate-da oʻrnatilgan.

Misol 2: Avtorizatsiyani tekshirish bilan onRestart

Activity qaytishda tokenning haqiqiyligini tekshiradi va kerak boʻlsa, kirish sahifasiga yoʻnaltiradi.

kotlin
class ProfileActivity : AppCompatActivity() {
    private val authManager = AuthManager()
    private val launcher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { Log.d("Profile", "Kirish ekranidan qaytildi") }

    override fun onRestart() {
        super.onRestart()
        if (!authManager.isTokenValid()) {
            Log.d("Profile", "Token muddati tugadi — kirishga yoʻnaltirish")
            launcher.launch(Intent(this, LoginActivity::class.java))
        }
    }
}

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

Agar foydalanuvchi ilovani uzoq vaqtga kichraytirgan boʻlsa va token muddati oʻtgandan keyin qaytgan boʻlsa, onRestart uni kirish ekraniga yoʻnaltiradi. Bu muddati oʻtgan token bilan soʻrovni bajarishga urinishda API xatolarining oldini oladi. Diqqat: tekshirish onRestart-da, onResume-da emas — dialogdan qaytishda keraksiz tekshirishning oldini olish uchun.

Misol 3: Fragment-da ViewLifecycleOwner bilan onRestart

Fragment maʼlumot yangilash uchun LifecycleObserver orqali onRestart-dan foydalanadi.

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 orqali onRestart")
                viewModel.refreshFeed()
            }
        })
    }
}

Fragment-da onRestart-ni bekor qilish oʻrniga LifecycleObserver ishlatiladi — merosxoʻrliksiz hayotiy sikl hodisalariga mantiq qoʻshish imkonini beruvchi moslashuvchan yondashuv. ViewLifecycleOwner observer-ning View doirasida yashashini kafolatlaydi (onDestroyView-dan omon qolmaydi).

Koʻp beriladigan savollar

onRestart onResume-dan nima bilan farq qiladi?

onResume Activity fokus olganda har safar chaqiriladi — shu jumladan dialog yoki tizim menyusidan qaytganda (Activity onStop-ga bormagan). onRestart faqat Activity toʻliq yashirilganda Stopped holatidan qaytganda chaqiriladi. onRestart „ogʻir“ yangilanishlar uchun torroq hodisa, onResume esa engil operatsiyalar uchun (sarlavha oʻzgartirish, vaqtni yangilash).

onRestart onStop boʻlmasdan chaqirilishi mumkinmi?

Yoʻq, mumkin emas. onRestart onStop bilan juftlashgan usul: onRestart faqat Activity onStop-dan oʻtgandan keyin chaqiriladi. Activity onStop-ga bormagan boʻlsa (masalan, dialog oynasi ochiq), qaytishda onRestart chaqirilmaydi — faqat onResume.

Emulyatorda onRestart-ni qanday simulyatsiya qilish mumkin?

Emulyatorda Home tugmasini bosing — Activity kichrayadi, onStop oladi. Keyin ilovani Recent Apps yoki launcher orqali oching — Activity onRestart → onStart → onResume oladi. Nosozliklarni tuzatish uchun Debug rejimidan onRestart-da toʻxtash nuqtalari bilan yoki Log.d Activity tegi bilan foydalaning.

onRestart-da istisno yuz bersa nima boʻladi?

onRestart-da ushlanmagan istisno Force Close-ga olib keladi. Tizim hayotiy sikl callback-larida istisnolarni ushlamaydi. Agar onRestart-da istisno chiqarishi mumkin boʻlgan operatsiyalar bajarilsa (try-catchsiz tarmoq soʻrovi, null View bilan ishlash), ularni try-catch bilan oʻrab oling.

onRestart-da isFinishing() ni tekshirish kerakmi?

Yoʻq. onRestart faqat Stopped holatidan qaytadigan tirik Activity-lar uchun chaqiriladi. isFinishing() onRestart-da har doim false boʻladi. isFinishing() tekshiruvi onPause (maʼlumotlarni saqlash) va onDestroy (qayta yaratishni finish()-dan farqlash) da maʼnoga ega.

Xulosa

  • onRestart — Activity Stopped holatidan qaytganda, onStart va onResume-dan oldin chaqiriladigan hayotiy sikl usuli.
  • onRestart Activity-ni birinchi yaratishda chaqirilmaydi — faqat toʻliq yashirishdan keyin qayta koʻrsatishda.
  • onRestart-ning asosiy maqsadi eskirgan maʼlumotlarni yangilash va holatni tekshirish (token, tarmoq, sozlamalar).
  • onRestart process death vaqtida chaqirilmaydi — jarayon oʻldirilgandan keyin tiklash uchun Bundle bilan onCreate-dan foydalaning.
  • onCreate mantiqini onRestart-da takrorlamang: ishga tushirishni onCreate-da, yangilashni onRestart-da bajaring.
  • Fragment uchun onRestart-ni bekor qilish oʻrniga viewLifecycleOwner-da LifecycleObserver dan foydalaning.
  • onRestart-ni toʻgʻri qoʻllash koʻp vazifalilikda UX-ni yaxshilaydi va eskirgan maʼlumotlar koʻrsatilishining oldini oladi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing