2016-08-03 2 views
2

LruCache 사용법과 관련하여 안드로이드에 관한 2 년 된 튜토리얼을 따르려고합니다. 그리고 지금까지 검색된 일부 샘플은 (int로) 변환 된 값을 전달하는 동일한 메소드를 가지고 있습니다. KiB. 구글의 문서에서 가져온로 Android LruCache 캐시 크기 매개 변수

final int maxMemory = (int)(Runtime.getRuntime().maxMemory()/1024); 
final int cacheSize = maxMemory/8; //use 1/8th of what is available 
imageCache = new LruCache<>(cacheSize); 

그러나 전달 된 int 값은 MIB (에서) 바이트로 변환 될 것 같다 https://developer.android.com/reference/android/util/LruCache.html

int cacheSize = 4 * 1024 * 1024; // 4MiB 
LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) { 
    protected int sizeOf(String key, Bitmap value) { 
     return value.getByteCount(); 
    } 
} 

내가 올바른 단위 인 하나 알고 싶습니다 측정. 대답은 크게 감사드립니다.

답변

2

LruCache는 캐시의 현재 크기와 캐시가 가득 찼는 지 여부를 결정하기 위해 sizeOf 메서드를 사용합니다. (즉, sizeOf가 캐시의 각 항목에 대해 호출되고 합계되어 합계 크기가 결정됩니다). 따라서 생성자에 대한 올바른 값은 sizeOf의 구현에 따라 다릅니다.

기본적으로 sizeOf은 항상 1을 반환합니다. 이는 생성자에 지정된 int maxSize이 단순히 캐시가 보유 할 수있는 항목의 수임을 의미합니다.

예에서 sizeOf은 각 비트 맵의 ​​바이트 수를 반환하도록 재정의되었습니다. 따라서 생성자의 int maxSize은 캐시가 보유해야하는 최대 바이트 수입니다. 당신이 볼 수 있듯이

+0

알았습니다! 고맙습니다! 그렇다면 sizeOf 메서드를 대신 오버라이드해야한다는 의미입니다. 이 튜토리얼에서 나는 아마도 이전의 방법 일 것입니다. – Rei

1

는 당신이 다음하는 것은 이론적 근거는 LruCache는 int를 필요로하고, https://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

에서 온다. int가있는 바이트를 처리하기 위해 메모리를 크게 사용할 수 있기 때문에 대신 킬로 바이트를 고려합니다. 그래서 :

final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024); 
// Use 1/8th of the available memory for this memory cache. 
final int cacheSize = maxMemory/8; 

뿐만 아니라, 같은 훈련, 비트 맵의 ​​

protected int sizeOf(String key, Bitmap bitmap) { 
    // The cache size will be measured in kilobytes rather than 
    // number of items. 
    return bitmap.getByteCount()/1024; 
} 

크기는 킬로 바이트로 표현된다.

작성자는 4.2^20이 int에 들어 있기 때문에 바이트 문서를 사용합니다.