Mobil Uygulamalarda Hot Start: Nedir, Faktörler ve Nasıl Hızlandırılır

Yazar: IT Sectr Yayınlanma: 2026-03-31 Okuma süresi: 10 dk

Hot Start, süreç zaten bellekteyken bir mobil uygulamayı küçültülmüş durumdan başlatmaktır. Sistemin sıfırdan bir süreç oluşturduğu Cold Start'ın aksine, sıcak başlatma 200–500 ms sürer ve Activity'nin onCreate ve onStart yöntemlerini çağırmakla sınırlıdır. Android Developers, 2025'e göre Hot Start en hızlı senaryodur, ancak hızı doğrudan yaşam döngüsü yöntemlerindeki iş miktarına bağlıdır.

Önemli Noktalar

  • Hot Start — zaten bellekte olan ve sistem tarafından yok edilmemiş bir uygulamanın başlatılması.
  • Cold Start — süreç oluşturma ile tam başlatma, 2–5 saniye sürer.
  • Warm Start — Activity'nin yeniden oluşturulduğu ancak sürecin hayatta kaldığı kısmi yeniden başlatma.
  • onCreate ve onStart — Hot Start sırasında çağrılan tek yöntemler.
  • Hot Start optimizasyonu, algılanan başlatma süresini azaltır ve kullanıcı deneyimini iyileştirir.

Mobil Uygulamalarda Hot Start Nedir

Hot Start, uygulamanın sürecinin zaten cihazın RAM'inde bulunduğu bir başlatma senaryosudur. Kullanıcı uygulamayı küçültür, sonra geri döner — ve sistem yeni bir süreç oluşturmaz, mevcut süreci devam ettirir. Bu senaryoda, işletim sistemi yüklemesi, Application sınıfı başlatması veya süreç oluşturma gerekmez, bu da UI'nin ekranda görünmesine kadar geçen süreyi önemli ölçüde azaltır. Android Belgeleri'ne (2025) göre Hot Start yalnızca 200–500 ms sürerken, Cold Start 5 saniye veya daha fazla sürebilir. Hız farkı, sistemin arka plan uygulamalarını daha sık boşalttığı sınırlı belleğe sahip cihazlarda özellikle belirgindir.

Hot Start'ın temel özelliği, çağrılan yaşam döngüsü yöntemlerinin minimum setidir. Android'de bunlar Activity.onCreate ve Activity.onStart'tır; iOS'te ise applicationDidBecomeActive'dir. Application.onCreate, ContentProvider.onCreate, Activity.onCreate ve birçok kütüphane başlatmasının sırayla çağrıldığı Cold Start'ın aksine, Hot Start tüm bu aşamaları atlar. Geliştirici, sıcak başlatma sırasında özellikle hangi kodun çalıştırıldığını anlamalıdır — genellikle ağır SDK başlatmaları, analitikler ve DI kapsayıcıları, sıcak başlatma sırasında artık gerekli olmamalarına rağmen hem Cold hem de Hot Start'ta tekrarlanır.

Cold Start, Warm Start ve Hot Start: Karşılaştırma

Üç uygulama başlatma senaryosu, başlatma derinliği açısından farklılık gösterir. Cold Start, uygulamanın kurulumdan sonra, cihaz yeniden başlatıldıktan sonra veya bellekten çıkarıldıktan sonra ilk kez başlatıldığında oluşur. Sistem yeni bir Linux süreci oluşturur, Application sınıflarını yükler, ContentProvider örnekleri oluşturur, kütüphane başlatmasını gerçekleştirir ve ancak o zaman Activity'yi işler. Tüm süreç, uygulama karmaşıklığına ve cihaz özelliklerine bağlı olarak 2–10 saniye sürer.

Warm Start bir ara senaryodur. Uygulama süreci bellekte canlıdır, ancak Activity yok edilmiştir ve yeniden oluşturulmalıdır. Bu, örneğin ekran döndürme sırasında veya Activity'nin bellek baskısı nedeniyle kaldırıldığı ancak sürecin kaldığı başka bir uygulamadan dönerken oluşur. Warm Start, Activity.onCreate ve Activity.onStart çağrılarını içerir, ancak Application.onCreate veya ContentProvider başlatmasını içermez. Warm Start süresi 500 ms ile 2 saniye arasındadır. Hot Start üçü arasında en hızlısıdır: Activity zaten geri yığında bulunur, süreç canlıdır ve sistem basitçe Activity.onRestart, onStart ve onResume çağrılarını yapar. Hot Start süresi 200–500 ms'dir. Warm Start'tan farkı, Activity'nin yeniden oluşturulmaması — mevcut örnekten geri yüklenmesidir.

ParametreCold StartWarm StartHot Start
SüreçYeniden oluşturulurMevcutMevcut
ActivityYeniden oluşturulurYeniden oluşturulurGeri yüklenir
Application.onCreateÇağrılırÇağrılmazÇağrılmaz
Tipik süre2–10 sn0,5–2 sn0,2–0,5 sn
Yaşam döngüsü yöntemleriTümüonCreate + onStartonRestart + onStart

Hot Start Sırasında Android Yaşam Döngüsü

Android'de Hot Start, kullanıcının Son Kullanılanlar ekranı aracılığıyla veya küçültülmüş durumdayken uygulama simgesine dokunarak uygulamaya geri dönmesiyle tetiklenir. Sistem, sürecin canlı olup olmadığını kontrol eder ve canlıysa sırayla Activity.onRestart, onStart ve onResume çağrılarını yapar. Hot Start sırasında onCreate yöntemi çağrılmaz çünkü Activity örneği zaten bellekte bulunur. Bu, Activity'nin yok edilmesi nedeniyle onCreate'in hala çağrıldığı Warm Start'tan önemli bir farktır. Google I/O 2019'a göre Android'de tipik Hot Start süresi 200–400 ms'dir ve bu aşamadaki herhangi bir yavaşlama, algılanan başlatma süresini doğrudan artırır.

Geliştiriciler genellikle UI başlatma kodunun, LiveData aboneliklerinin veya RecyclerView kurulumunun yalnızca onCreate'te değil, aynı zamanda onStart veya onResume'de de gerçekleştirildiğini gözden kaçırırlar. Hot Start sırasında, UI zaten yapılandırılmış olmasına rağmen bu kod blokları yeniden çalıştırılır. Tek seferlik başlatmanın (savedInstanceState kontrolü ile onCreate'te) ve devam ettirilebilir mantığın (onStart/onResume) ayrılması önerilir. Örneğin, ağır işlemler — bağdaştırıcı kurulumu, liste yükleme — onRestart sırasında çalıştırılmayan bir bloğa taşınmalı veya savedInstanceState kontrol edilmelidir.

Başlatma Türünü İzleme Örneği

Aşağıdaki Kotlin kodu, başlatma senaryosunu algılamanın ve süreyi ölçmenin basit bir yolunu gösterir. launchTimeStamp değişkeni başlatma başlangıç anını yakalar ve isColdStart, soğuk ve sıcak başlatma için mantığı ayırmaya olanak tanır.

kotlin
class MainActivity : AppCompatActivity() {

    private var launchTimeStamp = 0L
    private var isColdStart = true

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if (savedInstanceState == null) {
            isColdStart = true
            launchTimeStamp = System.currentTimeMillis()
            // tek seferlik başlatma
        } else {
            isColdStart = false
            // Hot Start — Activity geri yükleniyor
        }
    }

    override fun onResume() {
        super.onResume()
        if (isColdStart) {
            val launchTime =
                System.currentTimeMillis() - launchTimeStamp
            Log.d("LaunchTime", "Cold Start: $launchTime ms")
        }
    }
}

Sıcak Başlatma Sırasında iOS Yaşam Döngüsü

iOS'te Hot Start, sceneDidBecomeActive (UIKit) veya onAppear (SwiftUI) aracılığıyla uygulamanın arka plandan dönmesine karşılık gelir. Uygulama Askıda veya Arka Plan durumundaysa işletim sistemi süreci yeniden oluşturmaz. Sıcak başlatma sırasında AppDelegate'te applicationDidBecomeActive çağrılır, ancak applicationDidFinishLaunching çağrılmaz — bu, Application.onCreate'in atlandığı Android'e benzer. iOS, uygulamaları bellekten daha agresif bir şekilde boşaltır: cihazda yeterli RAM yoksa sistem bir arka plan uygulamasını boşaltabilir ve sonraki başlatma Cold Start olacaktır. Apple Developer Belgeleri'ne göre iOS'te ortalama Hot Start süresi 300–600 ms'dir.

iOS'teki önemli bir fark, Android anlamında Warm Start'in doğrudan bir benzerinin olmamasıdır. iOS'te bir uygulama küçültüldüğünde sceneDidEnterBackground çağrılır ve geri dönüldüğünde sceneWillEnterForeground ve sceneDidBecomeActive çağrılır. Sistem sahneyi boşaltır ancak süreci canlı tutarsa, sonraki başlatma sahne perspektifinden Soğuk ancak süreç perspektifinden Sıcak olacaktır. Geliştirici, başlatma kodunu yerleştirirken bunu dikkate almalıdır: NotificationCenter abonelikleri, UI güncellemeleri ve durum sıfırlamaları yalnızca viewDidLoad'da değil, sceneDidBecomeActive'te olmalıdır.

iOS'te Hot Start İşleme Örneği

Bu Swift kodu, sıcak başlatma sayısını izlemeyi ve mantığı ayırmayı gösterir. foregroundCount sayacı, arka plandan her dönüşte artar.

swift
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var foregroundCount = 0

    func sceneDidBecomeActive(
        _ scene: UIScene
    ) {
        foregroundCount += 1

        if foregroundCount == 1 {
            // Cold Start — tam başlatma
            setupSDKs()
        } else {
            // Hot Start — yalnızca UI güncellemesi
            refreshUI()
        }
    }

    private func refreshUI() {
        // ekrandaki verileri güncelleme
    }
}

Hot Start Hızını Etkileyen Faktörler

Hot Start hızını birkaç faktör kategorisi etkiler. Birincisi, onStart ve onResume yaşam döngüsü yöntemlerindeki iş miktarıdır. Geliştirici bu yöntemlere ağ verisi yükleme, JSON ayrıştırma, bağdaştırıcı başlatma veya ağır hesaplamalar yerleştirdiyse, her blok başlatma süresine onlarca veya yüzlerce milisaniye ekler. Android Vitals'a göre, Hot Start süresi 800 ms'yi aşan uygulamalar geri dönüşte kullanıcıların %20'sine kadarını kaybeder.

İkinci kategori, savedInstanceState'tan geri yüklenen parçalar ve Görünümlerdir. Parçalar ağır ViewPager2, WebView veya karmaşık derin iç içe geçmiş hiyerarşiler içeriyorsa, geri yüklemeleri CPU kaynaklarını tüketir. Google I/O 2023'e göre, her iç içe ViewGroup, Hot Start sırasında işleme süresine ortalama 2–5 ms ekler. Üçüncü kategori, üçüncü taraf SDK'lerdir: analitik kütüphaneleri, çökme raporlama araçları, A/B test çerçeveleri ve DEX yükleyiciler, arka plandan her dönüşte başlatma gerçekleştirebilir. Hangi SDK'lerin özellikle onStart/onResume'de kod çalıştırdığının kontrol edilmesi ve kritik olmayan görevlerin bir arka plan iş parçacığına ertelenmesi önerilir.

Sıcak Başlatma Optimizasyon Yöntemleri

Hot Start optimizasyonu, devam yaşam döngüsü yöntemlerindeki işi en aza indirmeye indirgenir. İlk yöntem tembel başlatmadır: ilk UI karesi için gerekli olmayan herhangi bir kod, onResume'dan sonra Handler.postDelayed veya Coroutine.launch(Dispatchers.IO) aracılığıyla gecikmeli olarak çalıştırılmalıdır. İkinci yöntem, Görünüm durumu önbelleğe almadır: uygulama küçültüldüğünde, verileri bir bellek içi önbelleğe kaydedin, böylece Hot Start sırasında veritabanından veya ağdan yeniden yüklemek zorunda kalmazsınız. Üçüncü yöntem, geri yüklenen veri miktarını en aza indirmek için Android'de SavedStateHandle ve iOS'te StateRestorationPolicy kullanmaktır.

Hot Start Sonrası Tembel Yükleme

Bu örnekte, Handler.postDelayed ilk karenin işlenmesinden 500 ms sonra analitik başlatmasını erteler. Bu, algılanan başlatma süresini etkilemez çünkü kullanıcı zaten arayüzü görmektedir.

kotlin
class AnalyticsDeferrer {

    fun lazyInitAfterHotStart() {
        val handler = Handler(Looper.getMainLooper())
        handler.postDelayed({
            // ilk kareden sonra başlatma
            Analytics.init(Application.getInstance())
            CrashReporter.start()
        }, 500)
    }
}

App Startup Kütüphanesini Kullanma

AndroidX App Startup, başlatma sırasında bileşenlerin başlatma sırasını kontrol etmenizi sağlar. Tüm ContentProvider'ler Cold Start sırasında otomatik olarak başlatılır, ancak Hot Start sırasında gerekli olmayan bileşenler için otomatik başlatmayı devre dışı bırakabilirsiniz.

kotlin
@Initializer(Application::class)
class SdkInitializer : Initializer<Unit> {

    override fun create(context: Context) {
        SdkOne.init(context)
        SdkTwo.init(context)
    }

    override fun dependencies() = emptyList<Class<*>>()
}

Başlatma Süresi İzleme Araçları

Hot Start süresini ölçmek için hem platform yerleşik araçları hem de üçüncü taraf çözümler bulunur. Android'de temel araç, Google Play Console'daki Android Vitals'dır — cihaz modeline ve işletim sistemi sürümüne göre ayrılmış tüm senaryolar (Cold, Warm, Hot) için başlatma süresi metriklerini otomatik olarak toplar. Ek olarak, AndroidX'ten Macrobenchmark'ı kullanabilirsiniz — otomatik başlatma performans testi için bir kütüphane. iOS'te eşdeğer, başlatma süresi, kare hızı ve bellek kullanımı hakkında veri toplayan MetricKit'tir.

Ayrıntılı sıcak başlatma profili oluşturma için Firebase Performance Monitoring (özel izlemeleri takip eder) ve başlatma süresi panolarıyla New Relic uygundur. Geliştirici tarafında manuel ölçüm için Android'de reportFullyDrawn kullanılır — UI'nin işlendiği ve etkileşime hazır olduğu anı sisteme bildiren bir API. iOS'te eşdeğer, MetricKit'teki endActivity'dir. Bu araçları birleştirerek, belirli cihazlarda Hot Start'ı hangi SDK veya kod bloğunun yavaşlattığını belirleyebilirsiniz.

Hot Start için Macrobenchmark Örneği

Cold ve Hot Start'ı ölçmek için Macrobenchmark kütüphanesini kullanan Kotlin kodu. Test, Activity'yi başlatır ve tamamlanma durumuna kadar geçen süreyi ölçer.

kotlin
@RunWith(AndroidJUnit4::class)
class StartupBenchmark {

    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    @Test
    fun hotStart() {
        benchmarkRule.measureRepeated(
            packageName = "com.example.app",
            metrics = listOf(StartupTimingMetric()),
            iterations = 10,
            startupMode = StartupMode.HOT
        ) {
            pressHome()
            startActivityAndWait()
        }
    }
}

Sıkça Sorulan Sorular

Hot Start, Cold Start'tan nasıl farklıdır?

Cold Start sıfırdan bir süreç oluşturur — Application, ContentProvider'ı yükler, tüm yaşam döngüsü yöntemlerini çalıştırır. Hot Start mevcut bir süreci kullanır ve Activity yeniden oluşturma gerektirmez, bu da onu 5–10 kat daha hızlı yapar.

Android'de Hot Start sırasında hangi yöntemler çağrılır?

Android'de Hot Start sırasında, Activity.onRestart, ardından onStart ve onResume çağrılır. onCreate yöntemi çağrılmaz çünkü Activity örneği zaten bellekte bulunur ve yok edilmemiştir.

Hot Start neden yavaş olabilir?

Ana nedenler, onStart ve onResume'da ağır başlatma, ağ verisi yükleme, karmaşık Görünüm hiyerarşilerini geri yükleme ve arka plandan her dönüşte üçüncü taraf SDK kodunun çalıştırılmasıdır.

Hot Start süresi nasıl ölçülür?

Android'de StartupMode.HOT ile Macrobenchmark kullanın; iOS'te MetricKit kullanın. Üretim izleme için Firebase Performance ve Google Play Console'daki Android Vitals uygundur.

Hot Start, Warm Start'a dönüştürülebilir mi?

Hayır, Hot Start ve Warm Start sistem tarafından belirlenen farklı senaryolardır. Hot Start, Activity canlıyken oluşur; Warm Start, Activity yok edilmiş ancak süreç canlıyken oluşur. Geliştirici senaryoyu zorla değiştiremez.

Özet

  • Hot Start — en hızlı başlatma senaryosu (200–500 ms), süreç oluşturma gerektirmez.
  • Cold Start — süreç oluşturma ile tam başlatma, 2–10 saniye sürer.
  • Android'de Hot Start sırasında onRestart, onStart ve onResume çağrılır, ancak onCreate çağrılmaz.
  • Ana optimizasyon yöntemi, devam yaşam döngüsü yöntemlerindeki işi en aza indirmektir.
  • Macrobenchmark ve Android Vitals, Hot Start'ı ölçmek ve izlemek için temel araçlardır.
  • Üçüncü taraf SDK'ler ve ağır Görünüm hiyerarşileri, sıcak başlatma yavaşlamasının ana nedenleridir.
  • Tembel başlatma ve Görünüm durumu önbelleğe alma, algılanan başlatma süresini %30–50 oranında azaltır.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun