문제

Android 앱에서 캐싱의 첫 번째 계층을 구현할 생각입니다. OOM 예외를 확실히 피하기 위해 SoftReferences를 고려하고 있었지만, Android가 "너무 빨리"이를 해제하는 방법에 대한 많은 기사가 있으므로 android.util.LruCache 캐시를 살펴보기로 결정했습니다.

질문 : 실제 기기에 맞게 크기를 조정하려면 어떻게해야합니까? LRU 캐시가 SoftReferences가 아니라 실제 솔루션이라는 것은 매우 멋지게 들리지만 OOM Exceptions를 정말로 피하고 싶다면 메가 바이트의 하드 참조를 사용하는 것이 매우 안전하지 않다고 느낍니다. 저에게 물어 보면 안전하지 않습니다. 어쨌든 이것이 유일한 옵션 인 것 같습니다. 실제 장치에서 앱의 힙 크기를 확인하기 위해 getMemoryClass를 조사했습니다 (+ 캐시 크기를 조정하기 전에 사용 가능한 힙 크기 확인). 기준선은 16 Megs인데, 괜찮은 것처럼 들리지만, Eclipse MAT에 따르면 약 5MB의 힙 크기에서 OOM 예외를 발생시키는 장치 (예 : G1)를 보았습니다. 나는 G1이 매우 오래되었다는 것을 알고 있지만, 요점은 내 경험이 문서에서 언급하는 16 Megs 기준선과 실제로 일치하지 않는다는 것입니다. 따라서 합리적으로 얻을 수있는 최대 용량이 필요한 경우 LRU 캐시를 어떻게 확장해야하는지 완전히 알 수 없습니다. (8Meg에 만족하고 저사양 장치에서 1Meg만큼 작게 사용할 수 있습니다.)

힌트를 보내 주셔서 감사합니다.

편집 : 내가 언급하는 Android LRU 캐시 클래스 : http://developer.android. com / reference / android / util / LruCache.html

도움이 되었습니까?

해결책

LruCache 크기를 계산하는 유효한 솔루션이 개발자 가이드에 설명되어 있다고 생각합니다. 라코 디스

자세한 내용은 http://developer.android.com/training/에서 확인할 수 있습니다.display-bitmaps / cache-bitmap.html

다른 팁

귀하의 질문에서 무엇을 요청하는지 이해하기가 다소 혼란 스럽습니다.한번해볼 게요.

다양한 캐싱 제품 AppFabric, memcached, ncache 및 scaleout에는 개체 당 1M 제한이 있습니다.확장은 일종의 사용자 지정을 제공한다고 생각합니다.

그러나 이것들은 모두 서버 측 제품입니다.따라서 대부분의 경우 단일 호스트 로컬 캐시 일 가능성이있는 Android 장치의 경우 최대 64kb를 사용합니다.내 말은, 왜 누군가가 장치의 개체 당 64kb 이상을 필요로할까요?내 추측이다.

내가 당신이라면 memcached (가장 유명한 오픈 소스 캐싱 솔루션)를 연구 할 것입니다.또한 스케일 아웃으로 작업하는 hello world를 쉽게 얻을 수 있으므로 스케일 아웃이 될 수 있습니다.그리고 비례 적으로 결정하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top