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, 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.
Üç 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.
| Parametre | Cold Start | Warm Start | Hot Start |
|---|---|---|---|
| Süreç | Yeniden oluşturulur | Mevcut | Mevcut |
| Activity | Yeniden oluşturulur | Yeniden oluşturulur | Geri yüklenir |
| Application.onCreate | Çağrılır | Çağrılmaz | Çağrılmaz |
| Tipik süre | 2–10 sn | 0,5–2 sn | 0,2–0,5 sn |
| Yaşam döngüsü yöntemleri | Tümü | onCreate + onStart | onRestart + onStart |
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.
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.
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")
}
}
}
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.
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.
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ı 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.
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.
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.
class AnalyticsDeferrer {
fun lazyInitAfterHotStart() {
val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
// ilk kareden sonra başlatma
Analytics.init(Application.getInstance())
CrashReporter.start()
}, 500)
}
}
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.
@Initializer(Application::class)
class SdkInitializer : Initializer<Unit> {
override fun create(context: Context) {
SdkOne.init(context)
SdkTwo.init(context)
}
override fun dependencies() = emptyList<Class<*>>()
}
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.
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.
@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
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, 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.
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.
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.
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
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.
Ayrıca okuyun