메모리는 모든 소프트웨어 개발 환경에서 중요한 리소스이지만, 물리적 메모리의 제약이 발생하는 경우가 많은 모바일 운영체제에서는 더욱 중요합니다. Android(Go 버전)가 흔히 설치되는 네이티브 메모리 용량이 낮은 기기의 경우 특히 더 그렇습니다. 앱에서 메모리를 최적화하여 이러한 환경에서 원활하게 실행되도록 도와주는 몇 가지 방법이 있습니다.
권장사항
캐시 메모리 해제
일반적인 환경에서처럼 백그라운드 프로세스가 실행되는 상태로 유지하는 데 필요한 메모리가 없을 수 있습니다. 이 경우 onTrimMemory()
를 사용하여 앱의 프로세스에서 불필요한 메모리를 줄일 수 있습니다. 앱의 현재 줄임 수준을 가장 효과적으로 알아보려면 ActivityManager.getMyMemoryState(RunningAppProcessInfo)
를 사용하여 불필요한 리소스를 최적화하거나 줄입니다. 예를 들어 표현식, 검색, 뷰 캐시 또는 열 수 있는 확장 프로그램에서 불필요한 메모리 사용량을 줄이면 메모리 부족으로 인해 앱이 비정상 종료되거나 ANR이 발생하는 횟수를 줄일 수 있습니다.
태스크 예약
동시 예약은 여러 개의 메모리 집약적인 작업이 동시에 실행되도록 하여 앱의 최대 메모리 사용량을 초과하는 리소스를 두고 경합이 발생하는 결과를 낳을 수 있습니다. 프로세스를 올바른 스레드 풀의 CPU 집약적이고 지연 시간이 짧은 태스크로 분리함으로써 리소스가 다양한 리소스 제약조건이 발생할 수 있는 기기에서 실행될 수 있도록 적절히 할당해 보세요.
메모리 누수
다양한 도구(예: Android 스튜디오의 메모리 프로파일러, Perfetto)가 특히 앱 내에서 메모리 누수를 찾고 줄이는 데 도움이 되도록 제공됩니다. 앱의 다른 구성요소가 시스템에 추가 압력을 주지 않고 실행될 수 있도록 이러한 도구를 사용하여 잠재적인 메모리 문제를 식별하고 수정하는 것이 좋습니다.
기타 팁
- 큰 이미지나 드로어블은 앱에서 더 많은 메모리를 소비합니다. 대형 또는 전체 색상 비트맵을 찾아서 최적화하여 메모리 사용량을 줄이세요.
- GIF는 메모리를 많이 사용하므로 Android(Go 버전)용으로 빌드할 때는 앱에서 GIF를 위해 다른 옵션을 사용해 보세요.
- WebP, pngcrush, pngquant 등의 도구를 사용하면 이미지 품질 저하 없이 PNG 파일의 크기를 줄일 수 있습니다. 이러한 도구는 체감 이미지 품질을 유지하면서 PNG 파일 크기를 줄여 줍니다.
- aapt 도구는 빌드 프로세스 중에 무손실 압축을 사용하여
res/drawable/
에 있는 이미지 리소스를 최적화할 수 있습니다. 예를 들어 aapt 도구는 색상 팔레트를 사용하여 최대 256개 색상이 필요한 트루 컬러 PNG를 8비트 PNG로 변환할 수 있습니다. 이렇게 하면 품질은 동일하지만 메모리 사용량은 줄어든 이미지가 생성됩니다.