Hot Start — jarayon allaqachon xotirada bo'lgan holatda mobil ilovani kichraytirilgan holatdan ishga tushirishdir. Cold Start-dan farqli o'laroq, bunda tizim jarayonni noldan yaratadi, issiq start 200 dan 500 ms gacha davom etadi va Activity-da onCreate va onStart chaqiruvi bilan cheklanadi. Android Developers, 2025 ma'lumotiga ko'ra, Hot Start eng tezkor ssenariy, ammo uning tezligi to'g'ridan-to'g'ri lifecycle metodlaridagi ish hajmiga bog'liq.
Asosiy
Hot Start — bu ilovaning jarayoni allaqachon qurilma operativ xotirasida mavjud bo'lgan ishga tushirish ssenariysi. Foydalanuvchi ilovani kichraytiradi, keyin qaytadi — va tizim yangi jarayon yaratmaydi, balki mavjudini tiklaydi. Ushbu ssenariyda OS yuklash, Application sinfini ishga tushirish va jarayon yaratish talab qilinmaydi, bu UI ekranda paydo bo'lish vaqtini keskin qisqartiradi. Android Documentation (2025) ma'lumotiga ko'ra, Hot Start atigi 200–500 ms davom etadi, Cold Start esa 5 soniya va undan ko'proqqa yetishi mumkin. Tezlik farqi, ayniqsa, cheklangan xotiraga ega qurilmalarda seziladi, bu yerda tizim fon ilovalarini tez-tez tushiradi.
Hot Startning asosiy xususiyati — chaqiriladigan lifecycle metodlarining minimal to'plami. Androidda bular Activity.onCreate va Activity.onStart, iOSda — applicationDidBecomeActive. Cold Startda ketma-ket Application.onCreate, ContentProvider.onCreate, Activity.onCreate va ko'plab kutubxonalarni ishga tushirish chaqiriladigan bo'lsa, Hot Start bu bosqichlarning barchasini o'tkazib yuboradi. Dasturchi aynan issiq startda qaysi kod bajarilishini tushunishi kerak — ko'pincha SDK, analitika va DI konteynerlarining og'ir ishga tushirilishi ham Cold, ham Hot Startda takrorlanadi, garchi issiq startda ular endi kerak bo'lmasa.
Ilovani ishga tushirishning uchta ssenariysi ishga tushirish chuqurligi bilan farqlanadi. Cold Start (sovuq start) ilova o'rnatilgandan keyin birinchi marta, qurilma qayta ishga tushirilganda yoki xotiradan tushirilganda sodir bo'ladi. Tizim yangi Linux jarayonini yaratadi, Application sinflarini yuklaydi, ContentProvider namunalarini yaratadi, kutubxonalarni ishga tushiradi va shundan keyingina Activity-ni ko'rsatadi. Butun jarayon ilovaning murakkabligi va qurilma xususiyatlariga qarab 2–10 soniya davom etadi.
Warm Start (iliq start) — oraliq ssenariy. Ilova jarayoni xotirada tirik, ammo Activity yo'q qilingan va qayta yaratilishi kerak. Bu, masalan, ekran aylantirilganda yoki boshqa ilovadan qaytganda, Activity xotira yetishmasligi tufayli tushirilganda, lekin jarayon qolganida sodir bo'ladi. Warm Start Activity.onCreate va Activity.onStart chaqiruvini o'z ichiga oladi, lekin Application.onCreate va ContentProvider ishga tushirishni o'z ichiga olmaydi. Warm Start vaqti — 500 ms dan 2 soniyagacha. Hot Start — uchtasining eng tezkori: Activity allaqachon back stackda mavjud, jarayon tirik va tizim shunchaki Activity.onRestart, onStart va onResume chaqiradi. Hot Start vaqti — 200–500 ms. Warm Startdan farqi shundaki, Activity qaytadan yaratilmaydi — mavjud namunadan tiklanadi.
| Parametr | Cold Start | Warm Start | Hot Start |
|---|---|---|---|
| Jarayon | Qaytadan yaratiladi | Mavjud | Mavjud |
| Activity | Qaytadan yaratiladi | Qaytadan yaratiladi | Tiklanadi |
| Application.onCreate | Chaqiriladi | Chaqirilmaydi | Chaqirilmaydi |
| Oddiy vaqt | 2–10 s | 0.5–2 s | 0.2–0.5 s |
| Lifecycle metodlari | Hammasi | onCreate + onStart | onRestart + onStart |
Androidda Hot Start foydalanuvchi Recents ekrani orqali yoki kichraytirilgan holatda belgini bosib ilovaga qaytganda boshlanadi. Tizim jarayonning tirikligini tekshiradi va agar shunday bo'lsa — ketma-ket Activity.onRestart, onStart va onResume chaqiradi. Hot Startda onCreate metodi chaqirilmaydi, chunki Activity namunasi allaqachon xotirada mavjud. Bu Warm Startdan muhim farq, bu yerda onCreate Activity yo'q qilingani sababli chaqiriladi. Google I/O 2019 ma'lumotiga ko'ra, Androidda odatdagi Hot Start vaqti 200–400 ms ni tashkil qiladi va bu bosqichdagi har qanday sekinlashish to'g'ridan-to'g'ri perceived launch time-ni oshiradi.
Dasturchilar ko'pincha UI ishga tushirish, LiveData-ga obuna bo'lish yoki RecyclerView sozlash kodi nafaqat onCreate-da, balki onStart yoki onResume-da ham bajarilishini sezmaydilar. Hot Startda bu kod bloklari UI allaqachon sozlangan bo'lsa ham, qayta bajariladi. Bir martalik ishga tushirishni (savedInstanceState tekshiruvi bilan onCreate-da) va tiklanadigan mantiqni (onStart/onResume) ajratish tavsiya etiladi. Masalan, og'ir operatsiyalar — adapterlarni sozlash, ro'yxatlarni yuklash — onRestartda bajarilmaydigan blokga ko'chirilishi yoki savedInstanceState tekshirilishi kerak.
Quyidagi Kotlin kodi start ssenariysini aniqlash va vaqtni o'lchashning oddiy usulini ko'rsatadi. launchTimeStamp o'zgaruvchisi ishga tushirish boshlanish momentini qayd etadi, isColdStart esa sovuq va issiq start uchun mantiqni ajratish imkonini beradi.
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()
// bir martalik ishga tushirish
} else {
isColdStart = false
// Hot Start — Activity tiklanadi
}
}
override fun onResume() {
super.onResume()
if (isColdStart) {
val launchTime =
System.currentTimeMillis() - launchTimeStamp
Log.d("LaunchTime", "Cold Start: $launchTime ms")
}
}
}
iOSda Hot Start ilovaning sceneDidBecomeActive (UIKit) yoki onAppear (SwiftUI) orqali fondan qaytishiga mos keladi. Operatsion tizim ilova Suspended yoki Background holatida bo'lgan bo'lsa, jarayonni qayta yaratmaydi. Issiq startda AppDelegate-da applicationDidBecomeActive chaqiriladi, lekin applicationDidFinishLaunching chaqirilmaydi — bu Application.onCreate o'tkazib yuboriladigan Android analogidir. iOS ilovalarni xotiradan agressivroq tushiradi: agar qurilmada RAM yetarli bo'lmasa, tizim fon ilovasini tushirishi mumkin va keyingi start Cold Start bo'ladi. Apple Developer Documentation ma'lumotiga ko'ra, iOSda o'rtacha Hot Start vaqti 300–600 ms.
iOSning asosiy farqi — Android tushunchasida Warm Startning to'g'ridan-to'g'ri analogining yo'qligi. iOSda ilova kichraytirilganda sceneDidEnterBackground chaqiriladi, qaytganda esa — sceneWillEnterForeground va sceneDidBecomeActive. Agar tizim sahnani tushirsa, lekin jarayonni tirik qoldirsa, keyingi start sahna nuqtai nazaridan Cold, jarayon nuqtai nazaridan esa Hot bo'ladi. Dasturchi ishga tushirish kodini joylashtirishda buni hisobga olishi kerak: NotificationCenter-ga obuna bo'lish, UI yangilash va holatlarni tiklash aynan sceneDidBecomeActive-da bo'lishi kerak, faqat viewDidLoad-da emas.
Bu Swift kodi issiq startlar sonini kuzatish va mantiqni ajratishni ko'rsatadi. foregroundCount hisoblagichi fondan har qaytishda ortadi.
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var foregroundCount = 0
func sceneDidBecomeActive(
_ scene: UIScene
) {
foregroundCount += 1
if foregroundCount == 1 {
// Cold Start — to'liq ishga tushirish
setupSDKs()
} else {
// Hot Start — faqat UI yangilash
refreshUI()
}
}
private func refreshUI() {
// ekranda ma'lumot yangilash
}
}
Hot Start tezligiga bir necha omillar toifasi ta'sir qiladi. Birinchisi — onStart va onResume lifecycle metodlaridagi ish hajmi. Agar dasturchi bu metodlarga tarmoqdan ma'lumot yuklash, JSON tahlil qilish, adapterlarni ishga tushirish yoki og'ir hisoblashlarni joylashtirgan bo'lsa, har bir bunday blok start vaqtiga o'nlab va yuzlab millisoniya qo'shadi. Android Vitals vositasi ma'lumotiga ko'ra, Hot Start davomiyligi 800 ms dan ortiq bo'lgan ilovalar qayta qaytishda foydalanuvchilarning 20% gacha yo'qotadi.
Ikkinchi toifa — savedInstanceState dan tiklanadigan fragmentlar va View-lar. Fragmentlarda og'ir ViewPager2, WebView yoki chuqur joylashtirish bilan murakkab iyerarxiyalar bo'lsa, ularni tiklash CPU resurslarini oladi. Google I/O 2023 ma'lumotiga ko'ra, har bir joylashtirilgan ViewGroup Hot Startda render vaqtiga o'rtacha 2–5 ms qo'shadi. Uchinchi toifa — uchinchi tomon SDK-lari: analitika, crash-reporting, A/B-test kutubxonalari va DEX yuklagichlari fondan har qaytishda ishga tushirishni bajarishi mumkin. Qaysi SDK-lar aynan onStart/onResume-da kod ishga tushirishini tekshirish va muhim bo'lmagan vazifalarni fon oqimiga kechiktirish tavsiya etiladi.
Hot Start optimallashtirish tiklash lifecycle metodlarida ishni minimallashtirishga asoslanadi. Birinchi usul — dangasa ishga tushirish: UI ning birinchi kadri uchun kerak bo'lmagan barcha kod onResume chaqiruvidan keyin Handler.postDelayed yoki Coroutine.launch(Dispatchers.IO) orqali kechikish bilan bajarilishi kerak. Ikkinchi usul — View holatini keshlash: ilovani kichraytirishda ma'lumotlarni in-memory keshlang, shunda Hot Startda ularni ma'lumotlar bazasidan yoki tarmoqdan qayta yuklash shart bo'lmasin. Uchinchi usul — Androidda SavedStateHandle va iOSda StateRestorationPolicy yordamida tiklanadigan ma'lumotlar hajmini minimallashtirish.
Ushbu misolda Handler.postDelayed analitikani ishga tushirishni birinchi kadr renderidan 500 ms keyin kechiktiradi. Bu perceived launch time-ga ta'sir qilmaydi, chunki foydalanuvchi allaqachon interfeysni ko'radi.
class AnalyticsDeferrer {
fun lazyInitAfterHotStart() {
val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
// birinchi kadrdan keyin ishga tushirish
Analytics.init(Application.getInstance())
CrashReporter.start()
}, 500)
}
}
AndroidX App Startup startda komponentlarni ishga tushirish tartibini boshqarish imkonini beradi. Barcha ContentProvider Cold Startda avtomatik ishga tushiriladi, lekin siz Hot Startda kerak bo'lmagan komponentlar uchun avtomatik ishga tushirishni o'chirib qo'yishingiz mumkin.
@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 vaqtini o'lchash uchun ham platformalarning o'rnatilgan vositalari, ham uchinchi tomon echimlari mavjud. Androidda asosiy vosita Google Play Console-dagi Android Vitals — barcha ssenariylar (Cold, Warm, Hot) uchun start vaqti ko'rsatkichlarini qurilma modellari va OS versiyalari bo'yicha avtomatik to'playdi. Qo'shimcha ravishda AndroidX dan Macrobenchmark — start unumdorligini avtomatlashtirilgan sinash uchun kutubxonadan foydalanish mumkin. iOSda ekvivalent MetricKit dir, u start vaqti, kadr chastotasi va xotiradan foydalanish haqida ma'lumot to'playdi.
Issiq startni batafsil profillash uchun Firebase Performance Monitoring (custom traces kuzatadi) va New Relic start vaqti dashboardlari bilan mos keladi. Dasturchi tomonidan qo'lda o'lchash uchun Androidda reportFullyDrawn — UI chizilgan va o'zaro aloqaga tayyor bo'lgan aniq momentni tizimga bildiruvchi API ishlatiladi. iOSda ekvivalent MetricKit-da endActivity dir. Ushbu vositalarni birlashtirib, aynan qaysi SDK yoki kod bloki Hot Startni ma'lum qurilmalarda sekinlashtirishini aniqlash mumkin.
Macrobenchmark kutubxonasidan foydalanadigan Kotlin kodi Cold va Hot Startni o'lchash uchun. Test Activity-ni ishga tushiradi va complete holatigacha vaqtni o'lchaydi.
@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()
}
}
}
Tez-tez beriladigan savollar
Cold Start jarayonni noldan yaratadi — Application, ContentProvider yuklaydi, barcha lifecycle metodlarini bajaradi. Hot Start allaqachon mavjud jarayondan foydalanadi va Activity-ni qayta yaratish talab qilinmaydi, bu uni 5–10 marta tezroq qiladi.
Androidda Hot Start da Activity.onRestart, keyin onStart va onResume chaqiriladi. onCreate metodi chaqirilmaydi, chunki Activity namunasi allaqachon xotirada mavjud va yo'q qilinmagan.
Asosiy sabablar — onStart va onResume da og'ir ishga tushirish, tarmoqdan ma'lumot yuklash, murakkab View iyerarxiyalarini tiklash va fondan har qaytishda uchinchi tomon SDK kodining bajarilishi.
Androidda Macrobenchmark StartupMode.HOT bilan, iOSda — MetricKit bilan foydalaning. Ishlab chiqarish monitoringi uchun Firebase Performance va Google Play Console-dagi Android Vitals mos keladi.
Yo'q, Hot Start va Warm Start — tizim tomonidan belgilanadigan turli ssenariylar. Hot Start Activity tirik bo'lganda, Warm — Activity yo'q qilingan, ammo jarayon tirik bo'lganda sodir bo'ladi. Dasturchi ssenariyni majburiy o'zgartira olmaydi.
Xulosa
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.