[android] 리소스 로딩 및 해제 최적화

안드로이드 앱을 개발할 때, 리소스의 효율적인 로딩과 메모리에서의 해제는 성능 측면에서 중요한 고려 사항이 됩니다. 이를 통해 앱의 반응성을 향상시키고 사용자 경험을 향상시킬 수 있습니다.

1. 리소스 로딩 최적화

리소스 로딩 최적화는 앱의 시작 시간을 단축하고, 사용 중에 부드러운 사용자 경험을 제공하는 데 중요합니다. 몇 가지 방법을 통해 이를 달성할 수 있습니다.

1.1. Drawable 리소스 압축

안드로이드에서는 벡터 이미지와 WebP 형식을 사용하여 리소스 압축을 할 수 있습니다. 벡터 이미지를 사용하면 다양한 해상도에 대응할 수 있고, WebP 형식은 JPG 및 PNG보다 더 작은 파일 크기를 제공합니다.

<vector android:height="48dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24.0"
    android:viewportWidth="24.0" android:width="48dp" xmlns:aapt="http://schemas.android.com/aapt">
    <path android:fillColor="#FF000000" android:pathData="M6,18c0,0.55 0.45,1 1,1h9v3l6-4.99L16,0h-2v12L6,18zM4,6L2,6v12l2,0V6zM18,6L16,6v12l2,0V6z"/>
</vector>

1.2. Lazy Loading

리소스의 초기화 로딩을 늦추어 사용자가 컨텐츠에 대한 요청이 있을 때에만 로딩할 수 있도록 함으로서 앱의 기동 시간을 최적화 할 수 있습니다.

1.3. 메모리 캐시

로컬 저장소에 이미 로드된 리소스를 캐시하여, 다시 로딩하는 시간을 단축할 수 있습니다.

2. 리소스 해제 최적화

리소스를 효과적으로 해제하지 않으면 메모리 누수가 발생하여 앱의 성능이 저하될 수 있습니다. 이를 방지하기 위해 다음과 같은 접근 방법을 고려할 수 있습니다.

2.1. Weak Reference 사용

Weak Reference를 사용하여 메모리 누수를 방지할 수 있습니다. Weak Reference는 가비지 컬렉터(GC)가 해당 객체를 수거할 수 있도록 합니다.

WeakReference<Bitmap> bitmapRef = new WeakReference<>(bitmap);
bitmap = bitmapRef.get();

2.2. 리소스 해제

리소스가 사용되지 않을 때 즉시 메모리에서 해제하여, 메모리 누수를 방지할 수 있습니다.

bitmap.recycle();

결론

리소스의 효율적인 로딩과 메모리에서의 해제는 안드로이드 앱의 성능 및 사용자 경험을 향상시키는 데 중요한 요소입니다. 위에서 제시한 최적화 방법을 통해 앱의 성능을 향상시키고, 사용자 경험을 향상시킬 수 있습니다.

참고 문헌: