Utilizing LRUCache for in memory bitmap caching
This commit is contained in:
parent
b4d9c9023d
commit
d833cceb96
@ -4,7 +4,9 @@ import android.app.Application;
|
||||
import android.graphics.Bitmap;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
import android.util.LruCache;
|
||||
|
||||
import com.anthonycr.bonsai.Completable;
|
||||
import com.anthonycr.bonsai.CompletableAction;
|
||||
@ -20,6 +22,8 @@ import java.io.IOException;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import acr.browser.lightning.utils.FileUtils;
|
||||
import acr.browser.lightning.utils.Preconditions;
|
||||
import acr.browser.lightning.utils.Utils;
|
||||
|
||||
/**
|
||||
@ -33,6 +37,12 @@ public class FaviconModel {
|
||||
|
||||
@NonNull private final ImageFetcher mImageFetcher;
|
||||
@NonNull private final Application mApplication;
|
||||
@NonNull private final LruCache<String, Bitmap> mFaviconCache = new LruCache<String, Bitmap>((int) FileUtils.megabytesToBytes(1)) {
|
||||
@Override
|
||||
protected int sizeOf(String key, Bitmap value) {
|
||||
return value.getByteCount();
|
||||
}
|
||||
};
|
||||
|
||||
@Inject
|
||||
public FaviconModel(@NonNull Application application) {
|
||||
@ -40,6 +50,22 @@ public class FaviconModel {
|
||||
mApplication = application;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Bitmap getFaviconFromMemCache(@NonNull String url) {
|
||||
Preconditions.checkNonNull(url);
|
||||
synchronized (mFaviconCache) {
|
||||
return mFaviconCache.get(url);
|
||||
}
|
||||
}
|
||||
|
||||
private void addFaviconToMemCache(@NonNull String url, @NonNull Bitmap bitmap) {
|
||||
Preconditions.checkNonNull(url);
|
||||
Preconditions.checkNonNull(bitmap);
|
||||
synchronized (mFaviconCache) {
|
||||
mFaviconCache.put(url, bitmap);
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static File createFaviconCacheFile(@NonNull Application app, @NonNull Uri uri) {
|
||||
FaviconUtils.assertUriSafe(uri);
|
||||
@ -71,9 +97,9 @@ public class FaviconModel {
|
||||
|
||||
File faviconCacheFile = createFaviconCacheFile(mApplication, uri);
|
||||
|
||||
Bitmap favicon = null;
|
||||
Bitmap favicon = getFaviconFromMemCache(url);
|
||||
|
||||
if (faviconCacheFile.exists()) {
|
||||
if (faviconCacheFile.exists() && favicon != null) {
|
||||
favicon = mImageFetcher.retrieveFaviconFromCache(faviconCacheFile);
|
||||
}
|
||||
|
||||
@ -93,6 +119,7 @@ public class FaviconModel {
|
||||
}
|
||||
|
||||
if (favicon != null) {
|
||||
addFaviconToMemCache(url, favicon);
|
||||
cacheFaviconForUrl(favicon, url).subscribe();
|
||||
}
|
||||
|
||||
|
@ -73,8 +73,8 @@ class ImageFetcher {
|
||||
|
||||
int size = Utils.dpToPx(24);
|
||||
|
||||
mLoaderOptions.inJustDecodeBounds = false;
|
||||
mLoaderOptions.inSampleSize = Utils.calculateInSampleSize(mLoaderOptions, size, size);
|
||||
mLoaderOptions.inJustDecodeBounds = false;
|
||||
|
||||
Response imageResponse = mHttpClient.newCall(imageRequest).execute();
|
||||
iconStream = imageResponse.body().byteStream();
|
||||
|
Loading…
x
Reference in New Issue
Block a user