피드로 돌아가기
Systematic ANR Diagnosis in Jetpack Compose Apps
Dev.toDev.to
Frontend

StrictMode가 놓치는 Room Lock Contention 해결로 ANR 15~30% 감소

Systematic ANR Diagnosis in Jetpack Compose Apps

SoftwareDevs mvpfactory.io2026년 6월 4일6advanced

Context

StrictMode는 Disk I/O와 Network Call은 탐지하나 Monitor Lock 획득 대기 상태는 식별하지 못하는 한계 존재. Jetpack Compose 환경에서 Dispatchers.Main.immediate와 Room의 synchronized 블록이 결합되어 메인 스레드가 차단되는 은닉된 ANR 패턴 발생.

Technical Solution

  • Dispatchers.Main.immediate 상에서 호출된 Room @Transaction이 내부 synchronized 락 획득 시도로 인해 메인 스레드를 Blocking하는 구조 파악
  • Perfetto의 lock_contention 데이터 소스와 SQL 쿼리를 활용하여 100ms 초과 메인 스레드 Lock Wait 지점을 정밀 추적
  • Custom Lint Rule을 설계하여 Main Dispatcher에서 Room @Transaction에 접근하는 코드 경로를 정적 분석으로 사전 차단
  • Macro-benchmark와 Perfetto Trace Analysis를 CI 파이프라인에 통합하여 런타임 락 경합을 자동 검증하는 3계층 게이트 구축
  • withContext(Dispatchers.IO)를 통한 명시적 Dispatcher 전환으로 Database Lock 획득 주체를 백그라운드 스레드로 격리

- Room @Transaction 호출 전 withContext(Dispatchers.IO) 적용 여부 검토 - StrictMode 통과 여부와 별개로 Perfetto를 통한 Lock Contention 분석 수행 - CI 단계에서 100ms 초과 Main-thread lock wait 발생 시 빌드 실패 처리하는 자동화 쿼리 도입

원문 읽기