Skip to content

Commit 5ef0fe8

Browse files
committed
bitmap模块取消清除缓存时displayConfig参数
1 parent 4a2f3bb commit 5ef0fe8

File tree

5 files changed

+65
-38
lines changed

5 files changed

+65
-38
lines changed

library/src/com/lidroid/xutils/BitmapUtils.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -279,18 +279,12 @@ public void clearDiskCache() {
279279
globalConfig.clearDiskCache();
280280
}
281281

282-
public void clearCache(String uri, BitmapDisplayConfig config) {
283-
if (config == null) {
284-
config = defaultDisplayConfig;
285-
}
286-
globalConfig.clearCache(uri, config);
282+
public void clearCache(String uri) {
283+
globalConfig.clearCache(uri);
287284
}
288285

289-
public void clearMemoryCache(String uri, BitmapDisplayConfig config) {
290-
if (config == null) {
291-
config = defaultDisplayConfig;
292-
}
293-
globalConfig.clearMemoryCache(uri, config);
286+
public void clearMemoryCache(String uri) {
287+
globalConfig.clearMemoryCache(uri);
294288
}
295289

296290
public void clearDiskCache(String uri) {

library/src/com/lidroid/xutils/bitmap/BitmapCacheListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ public interface BitmapCacheListener {
1717

1818
void onClearDiskCacheFinished();
1919

20-
void onClearCacheFinished(String uri, BitmapDisplayConfig config);
20+
void onClearCacheFinished(String uri);
2121

22-
void onClearMemoryCacheFinished(String uri, BitmapDisplayConfig config);
22+
void onClearMemoryCacheFinished(String uri);
2323

2424
void onClearDiskCacheFinished(String uri);
2525

library/src/com/lidroid/xutils/bitmap/BitmapGlobalConfig.java

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,12 @@ protected Object[] doInBackground(Object... params) {
285285
cache.clearDiskCache();
286286
break;
287287
case MESSAGE_CLEAR_BY_KEY:
288-
if (params.length != 3) return params;
289-
cache.clearCache(String.valueOf(params[1]), (BitmapDisplayConfig) params[2]);
288+
if (params.length != 2) return params;
289+
cache.clearCache(String.valueOf(params[1]));
290290
break;
291291
case MESSAGE_CLEAR_MEMORY_BY_KEY:
292-
if (params.length != 3) return params;
293-
cache.clearMemoryCache(String.valueOf(params[1]), (BitmapDisplayConfig) params[2]);
292+
if (params.length != 2) return params;
293+
cache.clearMemoryCache(String.valueOf(params[1]));
294294
break;
295295
case MESSAGE_CLEAR_DISK_BY_KEY:
296296
if (params.length != 2) return params;
@@ -332,16 +332,12 @@ protected void onPostExecute(Object[] params) {
332332
bitmapCacheListener.onClearDiskCacheFinished();
333333
break;
334334
case MESSAGE_CLEAR_BY_KEY:
335-
if (params.length != 3) return;
336-
bitmapCacheListener.onClearCacheFinished(
337-
String.valueOf(params[1]),
338-
(BitmapDisplayConfig) params[2]);
335+
if (params.length != 2) return;
336+
bitmapCacheListener.onClearCacheFinished(String.valueOf(params[1]));
339337
break;
340338
case MESSAGE_CLEAR_MEMORY_BY_KEY:
341-
if (params.length != 3) return;
342-
bitmapCacheListener.onClearMemoryCacheFinished(
343-
String.valueOf(params[1]),
344-
(BitmapDisplayConfig) params[2]);
339+
if (params.length != 2) return;
340+
bitmapCacheListener.onClearMemoryCacheFinished(String.valueOf(params[1]));
345341
break;
346342
case MESSAGE_CLEAR_DISK_BY_KEY:
347343
if (params.length != 2) return;
@@ -368,12 +364,12 @@ public void clearDiskCache() {
368364
new BitmapCacheManagementTask().execute(BitmapCacheManagementTask.MESSAGE_CLEAR_DISK);
369365
}
370366

371-
public void clearCache(String uri, BitmapDisplayConfig config) {
372-
new BitmapCacheManagementTask().execute(BitmapCacheManagementTask.MESSAGE_CLEAR_BY_KEY, uri, config);
367+
public void clearCache(String uri) {
368+
new BitmapCacheManagementTask().execute(BitmapCacheManagementTask.MESSAGE_CLEAR_BY_KEY, uri);
373369
}
374370

375-
public void clearMemoryCache(String uri, BitmapDisplayConfig config) {
376-
new BitmapCacheManagementTask().execute(BitmapCacheManagementTask.MESSAGE_CLEAR_MEMORY_BY_KEY, uri, config);
371+
public void clearMemoryCache(String uri) {
372+
new BitmapCacheManagementTask().execute(BitmapCacheManagementTask.MESSAGE_CLEAR_MEMORY_BY_KEY, uri);
377373
}
378374

379375
public void clearDiskCache(String uri) {

library/src/com/lidroid/xutils/bitmap/core/BitmapCache.java

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class BitmapCache {
3535
private final int DISK_CACHE_INDEX = 0;
3636

3737
private LruDiskCache mDiskLruCache;
38-
private LruMemoryCache<String, Bitmap> mMemoryCache;
38+
private LruMemoryCache<MemoryCacheKey, Bitmap> mMemoryCache;
3939

4040
private final Object mDiskCacheLock = new Object();
4141
private boolean isDiskCacheReadied = false;
@@ -66,13 +66,13 @@ public void initMemoryCache() {
6666
} catch (Throwable e) {
6767
}
6868
}
69-
mMemoryCache = new LruMemoryCache<String, Bitmap>(globalConfig.getMemoryCacheSize()) {
69+
mMemoryCache = new LruMemoryCache<MemoryCacheKey, Bitmap>(globalConfig.getMemoryCacheSize()) {
7070
/**
7171
* Measure item size in bytes rather than units which is more practical
7272
* for a bitmap cache
7373
*/
7474
@Override
75-
protected int sizeOf(String key, Bitmap bitmap) {
75+
protected int sizeOf(MemoryCacheKey key, Bitmap bitmap) {
7676
if (bitmap == null) return 0;
7777
return bitmap.getRowBytes() * bitmap.getHeight();
7878
}
@@ -204,7 +204,7 @@ public Bitmap downloadBitmap(String uri, BitmapDisplayConfig config, final Bitma
204204

205205
private void addBitmapToMemoryCache(String uri, BitmapDisplayConfig config, Bitmap bitmap, long expiryTimestamp) throws IOException {
206206
if (uri != null && bitmap != null && globalConfig.isMemoryCacheEnabled() && mMemoryCache != null) {
207-
String key = uri + (config == null ? "" : config.toString());
207+
MemoryCacheKey key = new MemoryCacheKey(uri, config == null ? null : config.toString());
208208
mMemoryCache.put(key, bitmap, expiryTimestamp);
209209
}
210210
}
@@ -218,7 +218,7 @@ private void addBitmapToMemoryCache(String uri, BitmapDisplayConfig config, Bitm
218218
*/
219219
public Bitmap getBitmapFromMemCache(String uri, BitmapDisplayConfig config) {
220220
if (mMemoryCache != null && globalConfig.isMemoryCacheEnabled()) {
221-
String key = uri + (config == null ? "" : config.toString());
221+
MemoryCacheKey key = new MemoryCacheKey(uri, config == null ? null : config.toString());
222222
return mMemoryCache.get(key);
223223
}
224224
return null;
@@ -314,15 +314,17 @@ public void clearDiskCache() {
314314
}
315315

316316

317-
public void clearCache(String uri, BitmapDisplayConfig config) {
318-
clearMemoryCache(uri, config);
317+
public void clearCache(String uri) {
318+
clearMemoryCache(uri);
319319
clearDiskCache(uri);
320320
}
321321

322-
public void clearMemoryCache(String uri, BitmapDisplayConfig config) {
323-
String key = uri + (config == null ? "" : config.toString());
322+
public void clearMemoryCache(String uri) {
323+
MemoryCacheKey key = new MemoryCacheKey(uri, null);
324324
if (mMemoryCache != null) {
325-
mMemoryCache.remove(key);
325+
while (mMemoryCache.containsKey(key)) {
326+
mMemoryCache.remove(key);
327+
}
326328
}
327329
}
328330

@@ -442,4 +444,35 @@ private Bitmap rotateBitmapIfNeeded(String uri, BitmapDisplayConfig config, Bitm
442444
}
443445
return result;
444446
}
447+
448+
public class MemoryCacheKey {
449+
private String uri;
450+
private String subKey;
451+
452+
private MemoryCacheKey(String uri, String subKey) {
453+
this.uri = uri;
454+
this.subKey = subKey;
455+
}
456+
457+
@Override
458+
public boolean equals(Object o) {
459+
if (this == o) return true;
460+
if (!(o instanceof MemoryCacheKey)) return false;
461+
462+
MemoryCacheKey that = (MemoryCacheKey) o;
463+
464+
if (!uri.equals(that.uri)) return false;
465+
466+
if (subKey != null && that.subKey != null) {
467+
return subKey.equals(that.subKey);
468+
}
469+
470+
return true;
471+
}
472+
473+
@Override
474+
public int hashCode() {
475+
return uri.hashCode();
476+
}
477+
}
445478
}

library/src/com/lidroid/xutils/util/core/LruMemoryCache.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ public final V remove(K key) {
211211
return previous;
212212
}
213213

214+
public final boolean containsKey(K key) {
215+
return map.containsKey(key);
216+
}
217+
214218
/**
215219
* Called for entries that have been evicted or removed. This method is
216220
* invoked when a value is evicted to make space, removed by a call to

0 commit comments

Comments
 (0)