onStart: mahiyyəti, Activity-nin Android ekranında görünməsi

Müəllif: IT Sectr Dərc olunub: 2026-03-04 Oxuma vaxtı: 9 dəq

onStart — Android həyat dövrünün metodu olub, Activity və ya Fragment istifadəçi üçün görünən olduqda çağırılır. Bu anda ekran cihazın displeyində görünür, lakin hələ istifadəçi ilə qarşılıqlı əlaqədə ola bilməz — daxiletmə fokusu onResume çağırılana qədər yoxdur. onStart metodu sistem dinləyicilərinin qeydiyyatı, geolokasiya xidmətlərinə qoşulma və komponent ekranda görünən olduğu müddətdə işləməli olan animasiyaların başladılması üçün idealdır. Activity-nin tam həyat dövrü haqqında daha ətraflı Activity Lifecycle məqaləsində oxuyun.

Əsas məqamlar

  • onStart — Activity və ya Fragment ekranda görünən olduqda çağırılır; onResume-dan əvvəl gəlir
  • Dinləyicilərin qeydiyyatı — BroadcastReceiver, LocationListener, SensorListener onStart-də qeydiyyatdan keçir və onStop-da silinir
  • Animasiyalar — ekran görünən olduğu müddətdə işləməli olan animasiyaların başladılması; onStop-da dayandırılması
  • Bound-xidmətlər — onStart-də bindService vasitəsilə müştəri-server xidmətlərinə qoşulma, onStop-da ayrılma
  • onStart vs onResume — onStart = görünmə, onResume = fokus + qarşılıqlı əlaqə; müxtəlif ekran aktivlik səviyyələri
  • Fragment.onStart — Activity.onStart-dən sonra, Fragment konteynerdə görünən olduqda çağırılır
  • onStart/onStop cütü — onStart-də qoşulan resurslar mütləq onStop-da sərbəst buraxılmalıdır ki, sızmaların qarşısı alınsın

Android-də onStart metodunun mahiyyəti

onStart — Activity həyat dövrünün ikinci metodu olub, sistem tərəfindən onCreate-dən sonra (və ya dayandırılmış vəziyyətdən qayıtdıqda onRestart-dan sonra) çağırılır. onStart çağırıldığı anda Activity və ya Fragment ekranda görünən olur. İstifadəçi interfeysi görür, lakin ekran hələ qarşılıqlı əlaqəyə hazır deyil — daxiletmə fokusu yalnız onResume-dən sonra yaranacaq.

onStart metodu Activity-nin «görünən ömrü»nə (visible lifetime) daxildir — onStart və onStop arasındakı interval. Bu müddət ərzində Activity digər pəncərələr (məsələn, şəffaf Activity və ya dialoq qutusu) tərəfindən qismən örtülə bilər, lakin onun UI-i görünən qalır. Bu, görünən ömrü Activity-nin tam fokusa malik olduğu «ön planda olma ömrü»ndən (onResume — onPause) fərqləndirir.

Bu üçsəviyyəli iyerarxiyanı anlamaq kodun düzgün bölüşdürülməsi üçün kritik əhəmiyyətlidir. onCreate — birdəfəlik inisiallaşdırma, onStart — görünən resursların qoşulması, onResume — eksklüziv resurslara monopoldan istifadə. Bu səviyyələri qarışdıran tərtibatçı yaddaş sızmaları və ya ekranlar arasında keçid zamanı səhv davranış riski yaradır.

Activity-də onStart

Activity-də onStart metodu ekran displeydə hər görünəndə çağırılır — həm ilk işə salınmada (onCreate-dən sonra), həm də fon rejimindən qayıtdıqda (onRestart-dan sonra). onCreate-dən fərqli olaraq, onStart Activity nümunəsinin ömrü ərzində dəfələrlə çağırıla bilər, buna görə də ekran hər görünəndə icra edilməli olan kod bura yerləşdirilir.

kotlin
class DashboardActivity : AppCompatActivity() {
    private val connectivityReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            val isConnected = ... // ConnectivityManager yoxlanışı
            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()
    }
}

Əsas qayda: onStart-də qoşulmuş bütün resurslar onStop-da sərbəst buraxılmalıdır. Bu, Activity ekrandan gizləndikdə onun batareya sərf etməməsini, sistem hadisələrini dinləməməsini və yaddaş tutmamasını təmin edir. Android Studio-da BroadcastReceiver qeydiyyatı zamanı müvafiq silinmə olmadan xəbərdarlıq edən lint qaydaları mövcuddur.

Fragment-də onStart

Fragment-də onStart konteyner Activity-nin həyat dövrü ilə sıx bağlıdır. Fragment onStart çağırışını yalnız onu ehtiva edən Activity onStart aldıqdan sonra alır. Lakin Fragment gecikmiş rejimdə əlavə edilibsə (FragmentTransaction.commit() addToBackStack olmadan), onStart gecikmə ilə çağırıla bilər.

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-ın spesifikası: əgər Fragment offscreenPageLimit = 1 olan ViewPager-də yerləşirsə, qonşu fragmentlər də görünən olmamışdan əvvəl onStart alacaq. Bu, dinləyicilərin vaxtından əvvəl qeydiyyatına səbəb ola bilər. Belə hallarda setUserVisibleHint() metodundan və ya onStart daxilində isVisible yoxlanışından istifadə edərək dinləyiciləri yalnız həqiqətən görünən fragmentlər üçün qeydiyyatdan keçirin.

onStart və onResume arasındakı fərq

onStart və onResume arasındakı əsas fərq — ekran aktivlik səviyyəsidir. onStart Activity-nin ekranda görünən olduğunu, lakin mütləq ön planda olmadığını bildirir. onResume Activity-nin ön planda olduğunu və daxiletmə fokusuna malik olduğunu bildirir. Fərq dialoq qutusu nümunəsində aydın görünür: Activity üzərində Dialog görünəndə Activity onResume-ni itirir (onPause çağırılır), lakin görünən qalır — onStart/onStop çağırılmır.

Fərqlər cədvəli hər metodun hansı ssenarilərdə çağırıldığını aydın göstərir:

SsenarionStartonResume
Tətbiqin işə salınmasıÇağırılırÇağırılır
Activity üzərində Dialog açılıbÇağırılmıronPause (fokus itkisi)
«Ev» düyməsinin basılmasıonStop (gizli)onPause → onStop
«Son istifadə olunanlar»dan qayıtmaonStart (görünən)onResume (fokus)
Ekranın döndərilməsionCreate → onStart→ onResume
Daxil olan zəngonStop (gizli)onPause → onStop

Bu cədvəl tərtibatçıya konkret kodu hansı metoda yerləşdirəcəyinə qərar verməyə kömək edir. Məsələn, tətbiq ekranın hər örtülməsində (hətta dialoqla da) video oynatmanı dayandırmalıdırsa, kod onPause-da yerləşdirilir. Video yalnız ekran tam gizləndikdə dayanmalıdırsa — kod onStop-da yerləşdirilir.

Dinləyicilərin və xidmətlərin qeydiyyatı

onStart — yalnız Activity ekranda görünən olduqda işləməli olan dinləyicilərin qeydiyyatı üçün optimal yerdir. Bu, üç əsas sistem komponenti növünə aiddir: sistem hadisələri üçün BroadcastReceiver, geolokasiya üçün LocationListener və cihaz sensorları üçün SensorListener.

BroadcastReceiver onStart-də

BroadcastReceiver onStart-də Context.registerReceiver() vasitəsilə dinamik qeydiyyatdan keçir və onStop-da unregisterReceiver() vasitəsilə silinir. Dinamik qeydiyyat statikdən (manifestdə) üstündür, çünki qəbuledicinin ömrünü Activity-nin görünmə dövrü ilə məhdudlaşdırır — Activity gizli olduqda tətbiq sistem broadcast mesajlarından oyanmır.

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 və SensorListener

Geolokasiya və sensorlar — resurs tutumlu əməliyyatlardır. GPS yeniləmələrinin onStart-də tələb edilməsi və onStop-da ləğv edilməsi, ekran gizli olduqda tətbiqin batareya sərf etməməsini təmin edir. Dəqiq tənzimləmə üçün minimum interval və məsafə ilə requestLocationUpdates istifadə olunur — məsələn, 10 saniyə və 10 metr, dəqiqlik və enerji sərfiyyatı arasında optimal balans verir.

Animasiyalar və onStart

Animasiyaların onStart-də, onCreate-də yox, başladılması animasiyanın ekran hər görünəndə işə düşməsini təmin edir. Əgər animasiyanı onCreate-də başlatsanız, o yalnız Activity-nin ilk yaradılmasında işə düşəcək, lakin fon rejimindən qayıtdıqda yox. onStart Activity hər görünən olduqda çağırılır ki, bu da onu dövri animasiyalar və keçidlər üçün ideal yer edir.

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 və ya ValueAnimator istifadə edən animasiyalar üçün onStop-da cancel() çağırmaq vacibdir. Animasiya Activity gizləndikdən sonra işləməyə davam edərsə, GPU və CPU resurslarını boş yerə sərf edir, cihazın performansını aşağı salır və batareyanın sürətlə boşalmasına səbəb olur. Android Studio Profiler (GPU qrafası) aktiv animasiyaları izləməyə və sızmaları aşkar etməyə imkan verir.

onStart/onStop cütü qaydası ön görüntü üçün kamera (CameraX) ilə işə də də aiddir. Kameranın onStart-də açılması və onStop-da bağlanması, tətbiqiniz ekranda görünməyəndə kameranın digər tətbiqlər üçün bloklanmamasını təmin edir. Bu qaydanın pozulması Google Play-də mənfi rəylərin tez-tez rast gəlinən səbəblərindəndir.

Tez-tez verilən suallar

Dinləyicilərin qeydiyyatı üçün onStart və onResume arasında nə fərq var?

onStart — ekran görünən olduqda işləməli olan dinləyicilər üçün (BroadcastReceiver, LocationListener, SensorListener). onResume — monopoliya girişi tələb edən resurslar üçün (kamera, video çəkiliş, nitqin tanınması). Sistem hadisə dinləyiciləri monopoliya girişi tələb etmir və qismən örtülmə zamanı işləyə bilər — onlar onStart-də qeydiyyatdan keçirilir. Kamera yalnız tam fokusda aktiv olmalıdır — onResume-də açılır.

Niyə onStart çağırılmaya bilər?

Activity görünən vəziyyətə keçərsə, onStart həmişə çağırılır. onStart olmadan yeganə ssenari — Activity yaradılır və dərhal başa çatır (məsələn, onCreate-də səhv səbəbindən). Bu halda onCreate-dən sonra dərhal onDestroy çağırılır. Lakin bu, düzgün yazılmış koddə olmamalı olan qəza ssenarisidir.

onStart onResume olmadan çağırıla bilərmi?

Bəli, onStart onResume almaya bilər, əgər Activity üzərində dərhal başqa Activity və ya şəffaf pəncərə açılırsa. Məsələn, onCreate-dən sonra avtorizasiya ekranı işə salınarsa (Activity A → Activity B), Activity A-da onStart çağırılır, lakin onResume yox — o, B ekranı ilə örtülərkən dərhal onPause → onStop alır.

onStart neçə dəfə çağırıla bilər?

onStart Activity nümunəsinin ömrü ərzində dəfələrlə çağırıla bilər. Activity hər dəfə gizli vəziyyətdən (onStop) görünən vəziyyətə keçəndə onStart çağırılır. Praktikada tətbiqin aktiv istifadəsi zamanı onStart sessiya ərzində onlarla və ya yüzlərlə dəfə çağırıla bilər.

Məlumatları onStart-da yükləməyə dəyər?

Məlumatların onStart-da yüklənməsi məlumatlar ekran hər görünəndə yenilənməlidirsə, əsaslandırılmışdır. Məsələn, xəbər lentinin və ya bildiriş siyahısının yenilənməsi. Lakin yükləmə asinxron olmalıdır — UI thread-ni bloklamamaq üçün lifecycleScope ilə korutinlər vasitəsilə. Ekran görünmələri arasında dəyişməyən məlumatlar üçün onları bir dəfə onCreate-də yükləmək kifayətdir.

Nəticə

  • onStart — görünən ömür metodu; Activity və ya Fragment ekranda görünəndə çağırılır
  • onStart-də qeydiyyat — BroadcastReceiver, LocationListener, SensorListener onStart-də qeydiyyatdan keçir və onStop-da silinir
  • onStart vs onResume — onStart = görünmə, onResume = daxiletmə fokusu; müxtəlif resurs növləri üçün müxtəlif səviyyələr
  • Animasiyalar — dövri animasiyaların onStart-də başladılması, onStop-da dayandırılması; GPU resurs sızmalarının qarşısını alır
  • Fragment.onStart — Activity.onStart ilə bağlıdır; ViewPager-də qonşu fragmentlər üçün əvvəlcədən çağırılır
  • Cüt qaydası — bütün onStart resursları onStop-da sərbəst buraxılmalıdır, əks halda yaddaş və batareya sızması
  • Məlumat yükləmə — onStart-da ekran hər görünəndə yenilənməli olan məlumatlar yüklənir

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.

Layihəni müzakirə et

Həm də oxuyun