다음 권장사항은 품질 저하 없이 앱을 최적화하는 데 도움이 됩니다.
기준 프로필 사용
기준 프로필은 첫 번째 실행부터 코드 실행 속도를 30% 개선하여 모든 사용자 상호작용(예: 앱 시작, 화면 간 이동, 콘텐츠 스크롤)을 첫 실행부터 더 원활하게 만듭니다. 앱의 속도와 반응성을 높이면 일일 활성 사용자를 늘리고 평균 재방문율을 높일 수 있습니다.
시작 프로필 사용
시작 프로필은 기준 프로필과 비슷하나, 컴파일 시간에 실행되어 더 빠른 앱 시작을 위해 DEX 레이아웃을 최적화합니다.
앱 시작 라이브러리 사용
앱 시작 라이브러리를 사용하면 초기화해야 하는 각 구성요소에 관해 별도의 콘텐츠 제공자를 정의하는 대신 단일 콘텐츠 제공자를 공유하는 구성요소 이니셜라이저를 정의할 수 있습니다. 이렇게 하면 앱 시작 시간이 크게 개선됩니다.
라이브러리 지연 로드 또는 자동 초기화 사용 중지
앱은 많은 라이브러리를 소비하며 이 중 일부는 시작에 필수일 수 있습니다. 그러나 첫 번째 프레임이 그려질 때까지 초기화를 지연시킬 수 있는 라이브러리가 많을 수 있습니다. 일부 라이브러리에는 시작 시 자동 초기화를 사용 중지하는 옵션이 있거나 주문형 초기화가 있습니다. 성능 향상을 위해 필요할 때까지 초기화를 연기하려면 이 옵션을 사용하세요. 예를 들어 주문형 초기화를 사용하여 WorkManager가 필요할 때만 호출할 수 있습니다.
ViewStub 사용
ViewStub
은 런타임에 레이아웃 리소스를 지연 확장하는 데 사용할 수 있는, 크기가 0인 보이지 않는 View
입니다. 이를 통해 시작 시 필요하지 않은 뷰 확장을 나중으로 지연할 수 있습니다.
Jetpack Compose를 사용하는 경우 상태를 사용하여 일부 구성요소 로드를 지연하는 ViewStub
과 유사한 동작을 얻을 수 있습니다.
var shouldLoad by remember {mutableStateOf(false)}
if (shouldLoad) {
MyComposable()
}
shouldLoad
를 수정하여 조건부 블록 내에 컴포저블을 로드합니다.
LaunchedEffect(Unit) {
shouldLoad = true
}
그러면 첫 번째 스니펫의 조건부 블록 안에 코드가 포함된 리컴포지션이 트리거됩니다.
스플래시 화면 최적화
스플래시 화면은 앱 시작에서 중요한 부분이며, 잘 설계된 스플래시 화면을 사용하면 전반적인 앱 시작 환경을 개선하는 데 도움이 될 수 있습니다. Android 12(API 수준 31) 및 이후 버전에는 성능을 개선하도록 설계된 스플래시 화면이 있습니다. 자세한 내용은 스플래시 화면을 참고하세요.
확장 가능한 이미지 유형 사용
이미지에는 벡터 드로어블을 사용하는 것이 좋습니다. 벡터 드로어블을 사용할 수 없다면 WebP 이미지를 사용하세요. WebP는 웹상의 이미지에 뛰어난 무손실 및 손실(lossy) 압축을 제공하는 이미지 형식입니다. Android 스튜디오를 사용하여 기존 BMP, JPG, PNG 또는 정적 GIF 이미지를 WebP 형식으로 변환할 수 있습니다. 자세한 내용은 WebP 이미지 만들기를 참고하세요.
또한 시작 중에 로드되는 이미지의 수와 크기를 최소화합니다.
성능 API 사용
미디어 재생용 성능 API는 Android 12(API 수준 31) 및 이후 버전에서 사용할 수 있습니다. 이 API를 사용하여 기기 기능을 파악하고 그에 따라 작업을 실행할 수 있습니다.
콜드 스타트 트레이스 우선
콜드 스타트는 앱이 처음부터 시작하는 것을 의미합니다. 즉, 시스템의 프로세스가 아직 앱 프로세스를 만들지 않은 상태에서 시작합니다. 일반적으로 기기가 부팅되거나 시스템에서 앱을 강제 종료한 후에 처음으로 앱을 실행하면 콜드 스타트가 발생합니다. 콜드 스타트는 속도가 훨씬 느린데 이는 앱과 시스템에서 다른 시작 유형(예: 웜 또는 핫 스타트)에는 필요하지 않은 더 많은 작업을 실행해야 하기 때문입니다. 콜드 스타트 시스템 추적을 통해 앱 성능을 전체적으로 더 잘 파악할 수 있습니다.
추천 서비스
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- 앱 시작 분석 및 최적화{:#app-startup-analysis-optimization}
- 앱 시작 시간
- 정지된 프레임