AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

안드로이드 앱 성능 문제: 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 스레드는 입력 응답만, 작업은 비동기 처리