Android 앱을 더 빠르게 만들기

Droidcon 소개

Droidcon은 커뮤니티 주도의 안드로이드 개발자 컨퍼런스입니다. 안드로이드 코어, 임베디드, 증강현실, 게임, 비즈니스 등 안드로이드 생태계의 각 영역의 전문가들이 유행을 선도하는 발표를 하는 행사입니다. 8월 27~28일 미국 뉴욕에서 Droidcon NYC가 열렸습니다.

이중 Udi Cohen가 발표한 “Speed up your app” 앱 성능 향상에 관한 발표 슬라이드와 그 정리 입니다.

CPU 처리 최적화

Systrace

Systrace는 안드로이드 커널로부터 수집한 시스템 및 실행 중인 어플리케이션 데이터를 바탕으로 CPU, 쓰레드 등에 대한 보고서를 작성해서 제공합니다. 디스플레이 성능을 측정하거나 성능 상의 병목현상이 발생하는 지점을 발견하는 데에 이용됩니다. Systrace를 실행하기 위해서는 갖춰야하는 조건들은 다음과 같습니다.

이런 개발 뉴스를 더 만나보세요

  • SDK 버전 20 이상
  • Python 설치 및 환경변수 설정
  • 안드로이드 버전 4.1 이상의 기기(개발자옵션에서 USB 디버깅 허용)
  • 어플리케이션 코드

먼저 안드로이드 스튜디오에서 앱을 빌드하고 컴퓨터와 연결된 기기에서 앱이 실행 중인 상황이어야 합니다. Tools - Android - Android Device Monitor (ADM)를 선택한 후 DDMS를 실행합니다. 대상 앱을 설정하고 Systrace 버튼을 누릅니다. 결과 파일, 추적 시간 등 설정 관련 창이 나타나면 원하는 값을 입력한 후 OK 버튼을 눌러 실행합니다. 정해진 시간이 지나 추적이 끝나면 미리 설정한 경로에 html파일로 결과를 저장한 후 자동으로 추적을 종료합니다. 보다 자세한 설명은 Android Developer에서 볼 수 있습니다.

Traceview

DDMBS에서 프로파일 메소드를 실행하기 버튼을 누르고, 어플리케이션에서 동작을 한 다음, 멈추기 버튼을 누릅니다. 어플리케이션에서 했던 동작에서 사용된 클래스, 메소드 별로 CPU 사용량을 볼 수 있습니다.

메모리 최적화

안드로이드 개발에서, 비트맵 처리 관련하여 자주 만나게 되는 오류는 Out Of Memory일 것 입니다. 명시적으로 메모리 해제를 하지 않아도 Garbage Collector가 사용하지 않는 메모리를 정리해주지만, 대량의 이미지를 처리하는 등의 과정에서는 메모리 관리가 필요합니다. 이를 위해 먼저 메모리를 어떻게 확인하는지 알아보겠습니다.

메모리 사용량 확인

안드로이드 스튜디오 하단의 Android - Memory 탭에서 현재 실행 중인 어플리케이션의 메모리 사용량을 확인할 수 있습니다.

빨간 색으로 표시된 지점에서 Garbage Collector에 의해 메모리가 회수 되었음을 알 수 있습니다.

메모리 스냅샷 분석

Monitor Memory에서 Dump Java Heap icon을 클릭해서 현시점의 Heap의 스냅샷을 생성합니다. 스냅샷 파일은 “Snapshot-<yyyy.mm.dd-hh.mm.ss>.hprof” 이름으로 Captures 탭에 저장되어 있습니다. 스냅샷 파일을 더블클릭하면 아래와 같이 메모리 상태를 확인할 수 있습니다. 객체 간의 참조관계, 각 객체가 차지하는 메모리량 등이 확인 가능합니다.

메모리 변화 확인

특정 액션을 취했을 때의 메모리 할당의 변화를 관찰하기 위해서 Allocation Tracker를 사용합니다. Start Allocation Tracking을 눌러 메모리 할당 모니터링을 시작합니다. 어플리케이션 내에서 특정 액션을 수행하고, 모니터링 시작할 때 눌렀던 아이콘과 동일한 아이콘을 눌러 모니터링을 중지합니다. Captures 탭의 Allocation Tracking 폴더에 파일이 생성되고 더블클릭하면 메모리 할당 결과를 확인할 수 있습니다. 메소드 및 클래스 별로 메모리 할당의 변화를 확인할 수 있습니다.

Eclipse MAT로 분석하기

Eclipse에서도 Memory Analyzer를 통해 안드로이드 스튜디오에서 했던 메모리 분석이 가능합니다.

UI 처리 최적화

Hierarchy View - 계층구조 및 성능점검

ADM에서 hierarchyview를 실행합니다. 화면을 구성하는 뷰들의 계층구조를 Tree View에서 확인할 수 있는데, Tree View에서 뷰를 선택하면 이에 대한 정보를 바로 위에 아래와 같이 표시합니다. 동그라미 세 개는 각각 measure, layout, draw의 성능을 나타내며, 초록색은 상위 50%, 노란색은 하위 50%, 빨간색의 최하위 그룹에 속함을 나타냅니다., ViewGroup은 어쩔 수 없이 자식들로 인해 상대적으로 낮은 성능을 보이지만 이를 감안하더라도 너무 낮은 성능을 보인다면 불필요한 계층구조를 사용하지 않았는지 점검해보아야 합니다.

lint - 리소스 파일 정적코드 분석

lint는 설정한 범위에 대한 리소스 파일의 소스코드를 분석합니다. 낭비되고 있는 리소스 자원이 없는지 향후 문제가 발생할 수 있는 코드가 존재하는지 확인합니다. Analyze - Inspect Code를 선택하고 검사 파일 범위를 설정하면 검사가 진행됩니다.

추가 적인 사항

더 자세한 내용은 비디오 또는 그의 블로그 글에서 확인하실 수 있습니다.

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.


Realm Korea

Realm Korea Team

4 design patterns for a RESTless mobile integration »

close