비트맵 메모리 사용량

비트맵은 앱에서 메모리를 가장 많이 사용하는 객체인 경우가 많습니다. 디코딩 및 크기 조절 작업은 프레임 렌더링의 중요한 경로에 있는 경우가 많습니다. 비트맵 메모리 사용량을 최적화하면 버벅거림, ANR, OOM 관련 프로세스 종료를 줄여 UI 응답성, 배터리 수명, 전반적인 안정성이 크게 개선됩니다.

비트맵 메모리 사용량이 많은 항목 식별

Android vitals는 Android 기기의 데이터를 집계하여 앱의 비트맵 메모리 사용량에 관한 측정항목을 제공합니다. 측정항목은 기본적으로 일별 데이터의 28일 요약으로 계산됩니다. 이 데이터는 다양한 기기 유형과 버전에서 메모리 효율성의 추세와 잠재적 회귀를 식별하는 데 도움이 됩니다.

Android vitals는 다음 프로세스 상태별로 분류된 앱의 비트맵 메모리 사용량을 공유합니다.

  • 포그라운드: 앱의 프로세스가 표시됩니다. P99는 다른 프로세스 상태에 비해 포그라운드에서 훨씬 높을 것으로 예상되지만, P99/P50 비율이 상당한 경우 (예: 3.5배 이상) 개발자는 조사해야 합니다. 이는 비트맵 메모리 누수를 나타내는 경우가 많기 때문입니다. 일반적인 사용량 (P50)과 이상치 사용량 (P99) 간의 차이를 확인하여 이를 식별할 수 있습니다. 일반적인 애셋 블로트는 모든 백분위수에서 메모리를 균일하게 부풀리는 반면 메모리 누수는 시간이 지남에 따라 누적되어 꼬리 끝 데이터 (P99)를 크게 왜곡합니다. 앱이 다른 상태로 전환된 후 포그라운드 비트맵 할당이 불필요하게 지속되지 않도록 합니다.
  • 사용자 인식 서비스: 앱의 프로세스가 감지 가능 상태로 실행되고 있습니다. 여기에는 포그라운드 서비스, 신속 처리 작업, 사용자 시작 데이터 전송 작업이 포함됩니다. 앱은 이러한 상태로 전환될 때 과도한 포그라운드 비트맵 할당을 유지해서는 안 됩니다. 이러한 서비스는 장기 실행 작업을 위해 설계되었으므로 대규모 애셋을 보유하면 전반적인 사용자 환경이 저하되고 메모리 부족 종료 프로그램 데몬 (LMKD)이 우선순위가 낮은 프로세스를 종료하여 메모리를 회수해야 합니다.
  • 백그라운드: 앱이 백그라운드 서비스를 실행 중이거나 최근에 백그라운드로 전환되었지만 아직 캐시되지 않았습니다. 이 프로세스 상태는 포그라운드 또는 감지 가능한 프로세스보다 중요하지 않으므로 앱은 메모리 압력을 줄이기 위해 여기에서 큰 비트맵 애셋을 명시적으로 해제해야 합니다.
  • 캐시됨: 앱이 캐시된 상태입니다. 이 상태는 LMK와 같은 시스템 메모리 압력에 매우 민감합니다. 앱은 OS에 의해 삭제되지 않도록 이 상태에서 비트맵 메모리 사용량을 적극적으로 줄여야 합니다.

비트맵 메모리 사용량이 많은 원인

사용된 적이 없는 가상 메모리도 계산에 포함될 수 있습니다. 예상치 못한 높은 비트맵 메모리 사용량이 표시되면 사용되지 않는 메모리를 할당하지 않는지 확인하세요.