TGViewer
Мобильная разработка Мобильная разработка @mobi_dev · 13.2K subscribers
Post #4726 1.38K
Как Android фиксирует ANR и почему стек вызовов может указать не туда

В Android 12 у ANR нет одного общего таймера. Фреймворк задаёт срок каждой операции: BroadcastReceiver должен завершить onReceive за 10 секунд, ContentProvider ответить на запрос типа данных за одну. Если компонент успел, отложенный вызов отменяют; иначе система запускает обработку ANR.

Стек вызовов может показать последнюю задачу в главном потоке, а не основную причину. В примере BroadcastReceiver занимает 4,8 секунды, затем Activity ещё 0,3 секунды, однако виновником выглядит Activity. Поэтому ищите повторяющуюся медленную работу в отчётах, а не чините каждый стек изолированно.

ANR из-за таймаута ввода попадают в Android Vitals и влияют на видимость приложения в Google Play. Разбор Embrace показывает цепочку срабатывания и сбора данных. Материал касается Android 12; в других версиях реализация может отличаться.
More from @mobi_dev
  1. Sep 20, 2026Как ProfilingManager на Android 15+ помогает искать причины тормозов в продакшене Profilin…
  2. Sep 20, 2026Как использовать свайп-действия вне List в SwiftUI В SwiftUI свайп-действия вроде удаления…
  3. Sep 20, 2026Как переносить сложные Android-экраны на Jetpack Compose: опыт TikTok Команда TikTok перен…
  4. Sep 19, 2026Как управлять кнопками панели инструментов в SwiftUI Одна и та же панель в SwiftUI ведёт с…
  5. Sep 19, 2026Как безопасно освобождать временные ресурсы с defer в Swift В Swift блок defer выполняется…
  6. Sep 19, 2026Как Flutter готовит приложения к новым версиям iOS Между WWDC и стабильным релизом iOS у к…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →