@@ -40,7 +40,6 @@ public class BitmapCache {
40
40
private LruMemoryCache <MemoryCacheKey , Bitmap > mMemoryCache ;
41
41
42
42
private final Object mDiskCacheLock = new Object ();
43
- private volatile boolean isDiskCacheReady = false ;
44
43
45
44
private BitmapGlobalConfig globalConfig ;
46
45
@@ -90,7 +89,7 @@ protected int sizeOf(MemoryCacheKey key, Bitmap bitmap) {
90
89
public void initDiskCache () {
91
90
// Set up disk cache
92
91
synchronized (mDiskCacheLock ) {
93
- if (globalConfig .isDiskCacheEnabled ()) {
92
+ if (globalConfig .isDiskCacheEnabled () && ( mDiskLruCache == null || mDiskLruCache . isClosed ()) ) {
94
93
File diskCacheDir = new File (globalConfig .getDiskCachePath ());
95
94
if (diskCacheDir .exists () || diskCacheDir .mkdirs ()) {
96
95
long availableSpace = OtherUtils .getAvailableSpace (diskCacheDir );
@@ -99,14 +98,13 @@ public void initDiskCache() {
99
98
try {
100
99
mDiskLruCache = LruDiskCache .open (diskCacheDir , 1 , 1 , diskCacheSize );
101
100
mDiskLruCache .setFileNameGenerator (globalConfig .getFileNameGenerator ());
101
+ LogUtils .d ("create disk cache success" );
102
102
} catch (Throwable e ) {
103
103
mDiskLruCache = null ;
104
- LogUtils .e (e . getMessage () , e );
104
+ LogUtils .e ("create disk cache error" , e );
105
105
}
106
106
}
107
107
}
108
- isDiskCacheReady = true ;
109
- mDiskCacheLock .notifyAll ();
110
108
}
111
109
}
112
110
@@ -117,14 +115,18 @@ public void setMemoryCacheSize(int maxSize) {
117
115
}
118
116
119
117
public void setDiskCacheSize (int maxSize ) {
120
- if (mDiskLruCache != null ) {
121
- mDiskLruCache .setMaxSize (maxSize );
118
+ synchronized (mDiskCacheLock ) {
119
+ if (mDiskLruCache != null ) {
120
+ mDiskLruCache .setMaxSize (maxSize );
121
+ }
122
122
}
123
123
}
124
124
125
125
public void setDiskCacheFileNameGenerator (FileNameGenerator fileNameGenerator ) {
126
- if (mDiskLruCache != null && fileNameGenerator != null ) {
127
- mDiskLruCache .setFileNameGenerator (fileNameGenerator );
126
+ synchronized (mDiskCacheLock ) {
127
+ if (mDiskLruCache != null && fileNameGenerator != null ) {
128
+ mDiskLruCache .setFileNameGenerator (fileNameGenerator );
129
+ }
128
130
}
129
131
}
130
132
@@ -137,17 +139,11 @@ public Bitmap downloadBitmap(String uri, BitmapDisplayConfig config, final Bitma
137
139
138
140
try {
139
141
Bitmap bitmap = null ;
142
+
140
143
// try download to disk
141
144
if (globalConfig .isDiskCacheEnabled ()) {
142
- synchronized (mDiskCacheLock ) {
143
- // Wait for disk cache to initialize
144
- while (!isDiskCacheReady ) {
145
- try {
146
- mDiskCacheLock .wait ();
147
- } catch (Throwable e ) {
148
- break ;
149
- }
150
- }
145
+ if (mDiskLruCache == null ) {
146
+ initDiskCache ();
151
147
}
152
148
153
149
if (mDiskLruCache != null ) {
@@ -245,10 +241,13 @@ public Bitmap getBitmapFromMemCache(String uri, BitmapDisplayConfig config) {
245
241
* @return The file if found in cache.
246
242
*/
247
243
public File getBitmapFileFromDiskCache (String uri ) {
248
- if (mDiskLruCache != null ) {
249
- return mDiskLruCache .getCacheFile (uri , DISK_CACHE_INDEX );
244
+ synchronized (mDiskCacheLock ) {
245
+ if (mDiskLruCache != null ) {
246
+ return mDiskLruCache .getCacheFile (uri , DISK_CACHE_INDEX );
247
+ } else {
248
+ return null ;
249
+ }
250
250
}
251
- return null ;
252
251
}
253
252
254
253
/**
@@ -260,14 +259,8 @@ public File getBitmapFileFromDiskCache(String uri) {
260
259
*/
261
260
public Bitmap getBitmapFromDiskCache (String uri , BitmapDisplayConfig config ) {
262
261
if (uri == null || !globalConfig .isDiskCacheEnabled ()) return null ;
263
- synchronized (mDiskCacheLock ) {
264
- while (!isDiskCacheReady ) {
265
- try {
266
- mDiskCacheLock .wait ();
267
- } catch (Throwable e ) {
268
- break ;
269
- }
270
- }
262
+ if (mDiskLruCache == null ) {
263
+ initDiskCache ();
271
264
}
272
265
if (mDiskLruCache != null ) {
273
266
LruDiskCache .Snapshot snapshot = null ;
@@ -315,10 +308,10 @@ public void clearMemoryCache() {
315
308
316
309
public void clearDiskCache () {
317
310
synchronized (mDiskCacheLock ) {
318
- isDiskCacheReady = false ;
319
311
if (mDiskLruCache != null && !mDiskLruCache .isClosed ()) {
320
312
try {
321
313
mDiskLruCache .delete ();
314
+ mDiskLruCache .close ();
322
315
} catch (Throwable e ) {
323
316
LogUtils .e (e .getMessage (), e );
324
317
}
@@ -377,16 +370,15 @@ public void flush() {
377
370
*/
378
371
public void close () {
379
372
synchronized (mDiskCacheLock ) {
380
- isDiskCacheReady = false ;
381
373
if (mDiskLruCache != null ) {
382
374
try {
383
375
if (!mDiskLruCache .isClosed ()) {
384
376
mDiskLruCache .close ();
385
- mDiskLruCache = null ;
386
377
}
387
378
} catch (Throwable e ) {
388
379
LogUtils .e (e .getMessage (), e );
389
380
}
381
+ mDiskLruCache = null ;
390
382
}
391
383
}
392
384
}
0 commit comments