Bitmap 메모리 캐시 프레임워크 (2)
/**
* @ : , bitmap
* @filename:LargestLimitedMemoryCache.java
* @author:gac
* @time:2018/6/29 11:19
*/
public class LargestLimitedMemoryCache extends LimitedMemoryCache{
// bitmap , bitmap
private final Map valueSizes = Collections.synchronizedMap(new HashMap());
public LargestLimitedMemoryCache(int sizeLimit) {
super(sizeLimit);
}
@Override
public boolean put(String key, Bitmap value) {
if(super.put(key,value)){//super.put , removeNext
valueSizes.put(value,getSize(value));// bitmap bitmap
return true;
}
return false;
}
@Override
public Bitmap remove(String key) {
Bitmap value =super.get(key);
if(value != null){
valueSizes.remove(value);
}
return super.remove(key);
}
@Override
public void clear() {
valueSizes.clear();
super.clear();
}
@Override
protected Reference createReference(Bitmap value) {
return new WeakReference(value);
}
@Override
protected int getSize(Bitmap value) {
return value.getRowBytes()*value.getHeight();
}
@Override
protected Bitmap removeNext() {
Integer maxSize = null;// bimap
Bitmap largestValue = null;// bitmap
Set> entries = valueSizes.entrySet();
// valueSizes
synchronized (valueSizes){
for(Map.Entry entry : entries){
if(largestValue == null){//
largestValue = entry.getKey();
maxSize = entry.getValue();
}else{
Integer size = entry.getValue();//
if(size > maxSize){//
maxSize = size;
largestValue = entry.getKey();
}
}
}
}
valueSizes.remove(largestValue);
return largestValue;
}
}
메모리가 제한에 도달하면 최신 데이터를 우선적으로 정리하고bitmap의 강력한 인용FIFOLimitedMemoryCache를 대기열에 저장합니다
/**
* @ : , bitmap
* @filename:FIFOLimitedMemoryCache.java
* @author:gac
* @time:2018/6/29 13:30
*/
public class FIFOLimitedMemoryCache extends LimitedMemoryCache {
// bitmap
private final List queue = Collections.synchronizedList(new LinkedList());
public FIFOLimitedMemoryCache(int sizeLimit) {
super(sizeLimit);
}
/**
*
* @param key
* @param value
* @return
*/
@Override
public boolean put(String key, Bitmap value) {
if(super.put(key,value)){
queue.add(value);
return true;
}
return false;
}
/**
*
* @param key
* @return
*/
@Override
public Bitmap remove(String key) {
Bitmap value = super.get(key);
if(value != null){
queue.remove(value);
}
return super.remove(key);
}
@Override
public void clear() {
queue.clear();
super.clear();
}
@Override
protected Reference createReference(Bitmap value) {
return new WeakReference(value);
}
@Override
protected int getSize(Bitmap value) {
return value.getRowBytes()*value.getHeight();
}
@Override
protected Bitmap removeNext() {// ,softMap
return queue.remove(0);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shirates에서 상대 선택기를 사용하는 방법 - 1부 -이것은 간단하고 강력한 표현입니다(참조). 오른쪽, 아래, 왼쪽, 위 방향으로 상대적으로 위젯을 얻을 수 있습니다. 올바른 방향의 위젯 올바른 방향으로 입력 라벨을 올바른 방향으로 올바른 방향으로 이미지 :오른쪽 버...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.