2011-02-14 7 views
2

대용량 (~ 100) 비트 맵, 즉 음악 커버 아트를 운영하는 앱이 있습니다. 비트 맵은 큰 배경과 작은 (50dip) 아이콘으로 두 가지 방식으로 사용됩니다. 두 개의 크기를 별도의 비트 맵으로 미리로드하고 캐시하는 것이 맞습니까? 두 가지 방법을 모두 구현했습니다 (두 가지 크기의 아이콘으로 큰 비트 맵을 사용하십시오). 그러나 실제 성능 차이는 볼 수 없습니다. 이러한 상황에 가장 적합한 방법은 무엇입니까?Android 비트 맵 캐싱

답변

7

두 이미지 크기를 모두 캐싱하는 것은 의미가 없습니다. 너무 많은 기억.

  1. , 당신은 당신이 메모리가 부족하지 않도록 할 수 있습니다 이런 식으로 캐시가 SoftReferences 사용하고 있는지 확인하고 항상 새로운 비트 맵을로드 할 수

    모범 사례 (내 소견으로) 것 낡은 것을 잃어 버리는 "비용"에 대해

  2. Canvas의 drawBitmap 메서드를 사용하여 큰 비트 맵을 더 작게 만듭니다.
  3. OutOfMemoryError을 경계해야하며 Throwable의 하위 클래스이고 Exception의 하위 클래스가 아니므로 catch(Exception e) 절은이를 catch하지 않습니다.
+0

'SoftReference'에 감사드립니다! 그것이 내가 놓친 중요한 점이다. –

+0

getCacheDir()/getExternalCacheDir()을 사용하여 임시로 내부/외부 저장소의 항목을 캐싱하겠습니까? Android가 SoftReference를 적극적으로 회수 할 수 있으며 앱을 디자인하는 동안 장기적으로 고려해야 할 더 많은 문제가 발생할 수 있다고 들었습니다. –

+3

두 가지 관련이 없습니다. softreferences를 사용하여 메모리가 부족하지 않은지 확인해야합니다. 영구 저장소에 캐싱은 필요할 때 이미지를 빠르게로드하는 데 유용 할 수 있지만 이미지의 원본에 따라 다릅니다. 웹에서 온 경우 다른 응용 프로그램의 리소스이거나 연락처에있는 것이 분명합니다. 사진, 그럴 필요는 없습니다. – Lior

1

개인적으로 저는 메모리에서 유지하고있는 비트 맵 수를 제한하기 위해 최선을 다할 것입니다. 아이콘이 더 큰 비트 맵의 ​​축소 된 사본으로 잘 보이는 경우, 나는 그 접근 방식을 선호합니다. 이것은 내 개인적인 경험 때문에 편향된 의견 일지 모르겠지만, 안드로이드에 대한 나의 경험에서 겪었던 가장 큰 문제는 비트 맵으로 작업 할 때 메모리가 부족한 상태입니다.

관련 문제