onRestart — Android-də Activity həyat dövrü metodu, sistem tərəfindən Activity-nin Stopped vəziyyətindən Started vəziyyətinə qayıtmasından əvvəl çağırılır. onRestart, əvvəllər başqa ekran tərəfindən gizlədilmiş və ya fon-a salınmış Activity-nin istifadəçi üçün yenidən görünən olduğunu bildirir. onRestart-da tərtibatçı köhnəlmiş məlumatları yeniləyir, siyahıları yenidən yükləyir və Activity görünməz olduğu müddətdə dəyişmiş ola biləcək UI vəziyyətini bərpa edir. Google Android Vitals (2025) məlumatlarına görə, onRestart-dan məlumat yeniləmək üçün istifadə edən tətbiqlər ekrana qayıtdıqda 25% daha az səhv məlumat göstərmə halları nümayiş etdirir. Android Developers sənədləri onRestart-ı Activity-nin ekranda yenidən görünməsindən əvvəl hazırlıq mərhələsi kimi təsvir edir.
Əsas məqamlar
onRestart — Android-in Activity görünməz Stopped vəziyyətindən yenidən görünən vəziyyətə qayıtdıqda, onStart-dan əvvəl çağırdığı callback metodudur. Bu metod unikaldır ki, yalnız Activity-nin təkrar göstərilməsində çağırılır — ilk instansiya yaradılmasında ardıcıllıq onRestart-ı keçərək onCreate ilə başlayır. Tam dövr: onCreate → onStart → onResume (ilk işə salma) və ya onRestart → onStart → onResume (təkrar göstərmə).
Android sistemi baxımından onRestart, Activity-nin qayıdışa hazırlaşmasına imkan verən optimallaşdırmadır: repozitoriyadan məlumatları yeniləmək, UI vəziyyətini sinxronlaşdırmaq, şəbəkə bağlantısını yoxlamaq. Fokus əldə edərkən hər dəfə çağırılan onResume-dən fərqli olaraq (o cümlədən dialoq və ya sistem menyusundan qayıtdıqda), onRestart yalnız tam gizlənmə-qayıdış dövründə işə düşür. Bu, onRestart-ı qismən fokus itkisi zamanı lazım olmayan „ağır“ yeniləmə əməliyyatları üçün ideal yer edir.
Android Activity həyat dövrü spesifikasiyasına görə, onStop və onRestart arasındakı vaxt intervalı bir neçə saniyədən (istifadəçi tez keçid etdi) bir neçə saata qədər (tətbiq fonda idi və istifadəçi qayıtdı) dəyişə bilər. Bu müddət ərzində uzaq mənbədəki (API, DB) məlumatlar dəyişmiş ola bilər, buna görə onRestart aktuallığı yoxlamaq üçün təbii nöqtədir.
onRestart yalnız Activity-nin Stopped vəziyyətindən qayıtması zamanı çağırılır, Activity onStop çağırıldıqdan sonra Stopped vəziyyətinə keçir. Aşağıda onRestart-a səbəb olan bütün ssenarilər verilmişdir.
onRestart çağırılma ssenariləri:
onRestart nə vaxt çağırılmır: ekran döndərmə zamanı (Activity məhv edilir və onCreate vasitəsilə yenidən yaradılır), dialoq pəncərəsindən qayıdışda (Activity onStop-a getmir, yalnız onPause → onResume), process death zamanı (Activity yenidən yaradılır).
onRestart və onCreate Activity-nin bərpasına iki fərqli yanaşmadır. Aralarında seçim Activity-nin tamamilə məhv edilib-edilməməsindən və ya sadəcə gizlədilməsindən asılıdır.
| Xüsusiyyət | onRestart | onCreate |
|---|---|---|
| Nə vaxt çağırılır | Activity Stopped-dan qayıdır | Activity ilk dəfə və ya məhv olduqdan sonra yaradılır |
| Vəziyyət qorunub | Bəli — ViewModel və sahələr canlıdır | Xeyr — hər şey yenidən yaradılır |
| Bundle | Ötürülmür | Ötürülür (savedInstanceState) |
| Tipik hərəkətlər | Məlumat yeniləmə, UI yeniləmə | View-in işə salınması, LiveData-ya abunə |
| Çağırılma tezliyi | Hər qayıdışda | Bir dəfə və ya məhv olduqdan sonra |
Seçim qaydası: View-in işə salınması və LiveData/StateFlow-a abunəni onCreate-də (və ya Fragment üçün onViewCreated-də) edin. Məlumat yeniləmə, siyahıları yenidən yükləmə və vəziyyət yoxlamasını — onRestart-da. Əgər məlumatlar ViewModel vasitəsilə yüklənirsə, onRestart sadəcə ViewModel-də refresh() metodunu çağıra bilər, View isə reaktiv axın vasitəsilə yenilənmiş məlumatlara abunə olar.
Google tövsiyə edir: onCreate məntiqini onRestart-da təkrarlamayın. ViewModel-də cari məlumatları yükləyən refresh() metodları ayırın və onları onRestart-da çağırın. Bu, MVVM arxitekturasının təmizliyini qoruyur və kod təkrarlanmasını aradan qaldırır.
onRestart — ekrana hər qayıdışda yerinə yetirilməli, lakin ilk açılışda lazım olmayan əməliyyatlar üçün ideal yerdir. Tipik ssenarilər:
viewModel.refreshItems() çağırın.onRestart-da nə etməməli: View-ləri yenidən işə salmayın — onlar canlıdır, çünki Activity məhv edilməyib. LiveData-ya yenidən abunə olmayın — abunə onCreate-də canlıdır. Yeni fragmentlər yaratmayın — onlar artıq FragmentManager-dadır.
Ən vacib istisna: onRestart sistem tərəfindən tətbiq prosesi öldürüldükdə çağırılmır. Bu, tərtibatçıların tez-tez qaçırdığı, vəziyyətin bərpası üçün onRestart-a güvənərək səhv etdiyi əsas məqamdır.
Process death zamanı:
Bundan necə qorunmaq olar: kritik vəziyyəti həmişə onSaveInstanceState(Bundle)-də saxlayın (onStop-dan əvvəl çağırılır) və ya ViewModel-də SavedStateHandle istifadə edin. onCreate-də savedInstanceState-i yoxlayın: əgər null deyilsə, vəziyyəti Bundle-dən bərpa edin, null-dırsa — təzə məlumatları yükləyin.
Google Android Vitals-ə görə, fonda uzun müddət qaldıqdan sonra Activity-yə qayıdışların təxminən 7%-i process death-dən sonra baş verir. Bu o deməkdir ki, onRestart çağırmalı olan hər 15-ci Activity əslində onCreate-dən keçir. Bu ssenarinin nəzərə alınmaması „qayıdışdan sonra boş ekran“ səhvinin əsas səbəblərindən biridir.
Activity redaktə ekranından qayıtdıqdan sonra tapşırıq siyahısını yeniləmək üçün onRestart-da viewModel.refreshTasks() çağırır.
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} tapşırıq alındı")
}
}
override fun onRestart() {
super.onRestart()
Log.d("TaskList", "onRestart: tapşırıq siyahısının yenilənməsi")
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() repozitoriyadan cari məlumatları yükləyir. LiveData avtomatik olaraq Activity-ni məlumat dəyişikliyi barədə xəbərdar edir — UI əlavə kod olmadan yenilənir. OnRestart yeni abunə yaratmır — o, artıq onCreate-də qurulub.
Activity qayıdışda tokenin etibarlılığını yoxlayır və lazım olduqda giriş səhifəsinə yönləndirir.
class ProfileActivity : AppCompatActivity() {
private val authManager = AuthManager()
private val launcher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { Log.d("Profile", "Giriş ekranından qayıdıldı") }
override fun onRestart() {
super.onRestart()
if (!authManager.isTokenValid()) {
Log.d("Profile", "Tokenin vaxtı keçdi — girişə yönləndirmə")
launcher.launch(Intent(this, LoginActivity::class.java))
}
}
}
class AuthManager {
fun isTokenValid(): Boolean {
val expiry = SharedPreferencesManager().getTokenExpiry()
return System.currentTimeMillis() < expiry
}
}
Əgər istifadəçi tətbiqi uzun müddətə kiçildibsə və tokenin vaxtı keçdikdən sonra qayıdıbsa, onRestart onu giriş ekranına yönləndirəcək. Bu, vaxtı keçmiş tokenlə sorğu yerinə yetirməyə cəhd edərkən API səhvlərinin qarşısını alır. Diqqət: yoxlama onRestart-da, onResume-də deyil — dialoqdan qayıdışda lazımsız yoxlamanın qarşısını almaq üçün.
Fragment məlumat yeniləməsi üçün LifecycleObserver vasitəsilə onRestart-dan istifadə edir.
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", "onRestart LifecycleObserver vasitəsilə")
viewModel.refreshFeed()
}
})
}
}
Fragment-də onRestart-ı ləğv etmək əvəzinə LifecycleObserver istifadə olunur — bu, vərəsəlik olmadan həyat dövrü hadisələrinə məntiq əlavə etməyə imkan verən daha çevik yanaşmadır. ViewLifecycleOwner observer-in View skopunda yaşamasını təmin edir (onDestroyView-dən sonra yaşamır).
Tez-tez verilən suallar
onResume Activity fokus aldıqda hər dəfə çağırılır — o cümlədən dialoq və ya sistem menyusundan qayıtdıqda (Activity onStop-a getməmişdir). onRestart yalnız Activity tam gizlədildikdə Stopped vəziyyətindən qayıtdıqda çağırılır. onRestart „ağır“ yeniləmələr üçün daha dar hadisədir, onResume isə yüngül əməliyyatlar üçündür (başlıq dəyişmə, vaxt yeniləmə).
Xeyr, çağırıla bilməz. onRestart onStop ilə qoşalaşmış metoddur: onRestart yalnız Activity onStop-dan keçdikdən sonra çağırılır. Activity onStop-a getməyibsə (məsələn, dialoq pəncərəsi açıqdır), qayıdışda onRestart çağırılmır — yalnız onResume.
Emulyatorda Home düyməsini sıxın — Activity kiçiləcək, onStop alacaq. Sonra tətbiqi Recent Apps və ya launcher vasitəsilə açın — Activity onRestart → onStart → onResume alacaq. Debug üçün Debug rejimindən onRestart-da dayanma nöqtələri ilə və ya Log.d Activity teqi ilə istifadə edin.
onRestart-da tutulmayan istisna Force Close-a səbəb olacaq. Sistem həyat dövrü callback-lərində istisnaları tutmur. onRestart-da istisna ata biləcək əməliyyatlar yerinə yetirilirsə (try-catch olmadan şəbəkə sorğusu, null View ilə iş), onları try-catch ilə əhatə edin.
Xeyr. onRestart yalnız Stopped vəziyyətindən qayıdan canlı Activity-lər üçün çağırılır. isFinishing() onRestart-da həmişə false olacaq. isFinishing() yoxlamasının mənası onPause (məlumatların saxlanması) və onDestroy (yenidən yaratmanı finish()-dən fərqləndirmə) üçündür.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun