안드로이드 앱에서의 과도한 렌더링, 메모리 누수, ANR 및 느린 렌더링 문제
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발
대상자
- 안드로이드 앱 개발자
- 중간~고급 수준의 기술적 이해가 필요한 개발자
- 앱 성능 최적화에 관심 있는 프로젝트 팀원
핵심 요약
- 과도한 렌더링(Overdraw): 화면의 픽셀이 반복적으로 그려지는 현상으로,
Debug GPU Overdraw
설정으로 진단 가능 - ANR(앱 미응답): 메인 스레드에서 I/O 차단, 복잡한 계산 발생 시 5초 내 응답 없으면 발생
- 느린 렌더링: 60fps 달성 위해 각 프레임은 16ms 이내로 렌더링되어야 함
섹션별 세부 요약
1. 과도한 렌더링(Overdraw) 진단 방법
- Developer Options 활성화:
Build Number
를 7번 클릭하여 활성화 - Debug GPU Overdraw 설정: 개발자 옵션에서
Debug GPU Overdraw
활성화 후 화면의 빨간색/노란색 픽셀로 과도한 렌더링 영역 확인 - 문제 해결: 레이아웃 최적화, View의 중복 제거,
ViewStub
사용
2. ANR(앱 미응답) 발생 원인 및 예방
- ANR 발생 조건:
- 메인 스레드에서 5초 이상 응답 없음
BroadcastReceiver
가 10-20초 내 실행되지 않음- 예방 방법:
- 메인 스레드에서 I/O 작업, 장시간 계산 금지
- Worker Thread 사용하여 백그라운드 작업 처리
- AsyncTask 또는 Coroutine 활용
3. 느린 렌더링 문제 진단 및 해결
- 60fps 달성 기준: 각 프레임은 16ms 이내로 렌더링되어야 함
- 진단 도구:
Systrace
: 상세한 프로파일링 데이터 제공Profile GPU Rendering
: GPU 렌더링 병목 지점 분석- 해결 방안:
- 하드웨어 가속 사용
- 리소스 최적화: 이미지 압축, 캐싱
- 主线程에서 비동기 작업 처리
결론
- ANR 예방: 메인 스레드에서 긴 작업 금지,
Worker Thread
사용 - 렌더링 성능 향상:
Profile GPU Rendering
도구 활용, 16ms 이내 프레임 렌더링 목표 - 과도한 렌더링:
Debug GPU Overdraw
설정으로 진단, 레이아웃 중복 최소화 - 핵심 메트릭:
100-200ms
는 느린 앱 기준,60fps = 16ms/프레임