Main thread, ANR, proses və thread-lər
Hər tətbiq defolt olaraq bir prosesdə, UI isə tək main (UI) thread-də işləyir. İki dəmir qayda:
- Main thread-i bloklama — UI donur.
- UI-a yalnız main thread-dən toxun — əks halda exception.
ANR (Application Not Responding) — sistem dialoqu, yaranma səbəbləri:
- Input event 5 saniyə ərzində emal olunmur
- BroadcastReceiver ~10 saniyəyə bitmir
- Foreground service startForeground-u vaxtında çağırmır
Tipik günahkarlar: main thread-də şəbəkə/disk əməliyyatı, sinxron IPC, ağır JSON parsing, SharedPreferences commit(), lock gözləmələri.
Müasir həll: coroutines + dispatchers (IO/Default-a keçir, nəticəni Main-də göstər). Köhnə üsullar (AsyncTask — deprecated, HandlerThread, ExecutorService) haqqında soruşula bilər — AsyncTask-ın niyə deprecated olduğunu bil: lifecycle-dan xəbərsizdir, leak yaradır, error handling zəifdir.
// PİS: main thread-də disk + şəbəkə
override fun onCreate(savedInstanceState: Bundle?) {
val cached = File(filesDir, "rates.json").readText() // disk!
val rates = fetchRatesSync() // şəbəkə!!
}
// YAXŞI: iş IO-da, nəticə Main-də
lifecycleScope.launch {
val rates = withContext(Dispatchers.IO) {
val cached = File(filesDir, "rates.json").readText()
parseOrFetch(cached)
}
binding.ratesView.render(rates) // main thread
}ANR-a aparan kod və düzəldilmiş variantı
Diaqnostika sualına hazır ol: "Production-da ANR artıb — nə edərsən?" Cavab axını: Play Console ANR rate və stack trace-ləri → hansi thread nəyi gözləyir (main thread-in stack-i) → StrictMode ilə lokal reproduksiya → düzəliş (işi background-a köçür) → release-dən sonra metrikanın enməsini izlə. Android vitals-da ANR həddi aşılanda Play Store görünürlüğü də cəzalanır — bunu bilmək praktiki təcrübə siqnalıdır.
🛠 Tapşırıq
ANR-ı öz gözünlə gör: onCreate-də Thread.sleep(8000) qoy və tətbiqə toxun — sistem dialoqunu gözlə.
- Sonra
Application-da StrictMode-u aktivləşdir (penaltyLog) və main thread-də bir fayl oxu — logcat-da pozuntunu tap. - Həmin işi
withContext(Dispatchers.IO)-ya köçür, pozuntunun yox olduğunu təsdiqlə.
Bitdi sayılır: "production-da ANR artıb" sualına diaqnostika addımlarını sadalaya bilirsənsə.
📚 Mənbələr və sənədlər
- ANR-larrəsmideveloper.android.com
- Processes və threads icmalırəsmideveloper.android.com