안드로이드 앱 성능 문제: Overdraw, 메모리 누수, ANR 및 느린 렌더링
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발
대상자
안드로이드 앱 개발자, 성능 최적화에 관심 있는 개발자
난이도: 중급~고급 (성능 분석, 스레드 관리, GPU 렌더링 등 기술적 지식 필요)
핵심 요약
- Overdraw는 화면의 픽셀이 중복으로 그려지는 현상으로, GPU Overdraw 디버깅 모드를 통해 진단 가능
- ANR(앱 응답 없음)은 메인 스레드에서 5초 이내에 입력 이벤트 응답 없음 또는 BroadcastReceiver가 10~20초 이내에 실행 완료하지 못함 시 발생
- 60fps 유지를 위해 각 프레임 렌더링 시간은 16ms 이하로 제어해야 하며, Systrace, GPU Profiling 등을 통해 지연 원인 분석 가능
섹션별 세부 요약
1. Overdraw 진단 방법
- Overdraw 정의: 픽셀이 1x, 2x, 3x, 4x 단계로 중복 렌더링 되는 현상
- 진단 방법:
- 개발자 옵션 활성화: 설정 → 정보 → 빌드 번호 7회 클릭
- GPU Overdraw 모드 활성화: 개발자 옵션 → GPU Overdraw 표시 토글
- 시각적 진단: 빨강, 노랑, 파랑, 초록색으로 픽셀 중복 수준 표시
2. ANR 발생 원인 및 예방
- ANR 발생 조건:
- 메인 스레드에서 I/O 블로킹(네트워크, 파일 접근)
- 메모리 구조 생성(100~200ms 이상 소요)
- 메인 스레드에서 비용이 많이 드는 계산 수행
- 예방 방법:
- 비동기 작업 처리: Worker Thread
또는 AsyncTask
사용
- 스레드 경쟁 최소화: 자원 동시 접근 시 락 관리
- BroadcastReceiver 실행 시간 제한: 10~20초 이내 완료
3. UI 렌더링 성능 최적화
- 60fps 달성 조건:
- 프레임 생성 시간 제한: 16ms 이하 (1/60초)
- GPU 렌더링 분석: Profile GPU Rendering
도구 활용
- 지연 진단 방법:
- 시각적 검사(빠른 방법)
- Systrace(상세한 데이터 제공)
- 커스텀 성능 모니터링(앱 내 실시간 분석)
결론
- 실무 적용 팁:
- GPU Overdraw 모드를 주기적으로 활성화해 렌더링 효율 확인
- 메인 스레드에서 긴 작업을 절대 수행하지 않도록 설계
- 60fps 유지를 위해 Choreographer
, Vsync
와 연동된 렌더링 로직 구현
- Systrace 및 GPU Profiling을 통해 성능 병목 지점 식별 후 최적화
- 핵심 원칙: UI 스레드는 입력 응답만, 작업은 비동기 처리