softReference缓存的对象,只有当虚拟机内存不足的才会回收,很好的避免了OOM。softreference
package cache;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.concurrent.ConcurrentHashMap;
import android.graphics.Bitmap;
import android.os.Handler;
import android.widget.ImageView;
public class FileServiceByMemoary extends FileServiceAbstractDetails {
@Override
public void loadFileToMap() {
// for memory, nothing to do.
}
@Override
public void getBitmap(String url, ImageView imageView,
Bitmap defaultBitmap, Integer scrollState) {
resetPurgeTimer();
// scrollState 0:停止状态,需要加载图片(cache -> network)
// scrollState 1/2:滚动状态,此时就用cache图片,如果cache没有就用默认defaultBitmap
Bitmap bitmap = getBitmapFromCache(url);
if (scrollState != SCROLL_STATUS_STOP) {// 处于滚动状态
if (bitmap == null) {
imageView.setImageBitmap(defaultBitmap);
} else {
imageView.setImageBitmap(bitmap);
}
return;
}
if (bitmap == null) {
forceDownload(url, imageView, defaultBitmap);
} else {
cancelPotentialDownload(url, imageView);
imageView.setImageBitmap(bitmap);
}
}
// public void setMode(Mode mode) {
// this.mode = mode;
// clearCache();
// }
private static final int HARD_CACHE_CAPACITY = 30;
private static final int DELAY_BEFORE_PURGE = 10 * 1000; // in milliseconds
private final static HashMap mHardBitmapCache = new LinkedHashMap(
HARD_CACHE_CAPACITY, 0.75f, true) {
private static final long serialVersionUID = 1L;
@Override
protected boolean removeEldestEntry(
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49624-1.html