@@ -550,6 +550,7 @@ public Object getSerializable(@NonNull final String key, final Object defaultVal
550
550
/**
551
551
* 获取缓存大小
552
552
* <p>单位:字节</p>
553
+ * <p>调用了Thread.join(),需异步调用,否则可能主线程会卡顿</p>
553
554
*
554
555
* @return 缓存大小
555
556
*/
@@ -559,6 +560,7 @@ public long getCacheSize() {
559
560
560
561
/**
561
562
* 获取缓存个数
563
+ * <p>调用了Thread.join(),需异步调用,否则可能主线程会卡顿</p>
562
564
*
563
565
* @return 缓存个数
564
566
*/
@@ -591,19 +593,16 @@ private class CacheManager {
591
593
private final long sizeLimit ;
592
594
private final int countLimit ;
593
595
private final Map <File , Long > lastUsageDates = Collections .synchronizedMap (new HashMap <File , Long >());
594
- private final File cacheDir ;
596
+ private final File cacheDir ;
597
+ private final Thread mThread ;
595
598
596
599
private CacheManager (final File cacheDir , final long sizeLimit , final int countLimit ) {
597
600
this .cacheDir = cacheDir ;
598
601
this .sizeLimit = sizeLimit ;
599
602
this .countLimit = countLimit ;
600
603
cacheSize = new AtomicLong ();
601
604
cacheCount = new AtomicInteger ();
602
- calculateCacheSizeAndCacheCount ();
603
- }
604
-
605
- private void calculateCacheSizeAndCacheCount () {
606
- new Thread (new Runnable () {
605
+ mThread = new Thread (new Runnable () {
607
606
@ Override
608
607
public void run () {
609
608
int size = 0 ;
@@ -619,14 +618,25 @@ public void run() {
619
618
cacheCount .getAndAdd (count );
620
619
}
621
620
}
622
- }).start ();
621
+ });
622
+ mThread .start ();
623
623
}
624
624
625
625
private long getCacheSize () {
626
+ try {
627
+ mThread .join ();
628
+ } catch (InterruptedException e ) {
629
+ e .printStackTrace ();
630
+ }
626
631
return cacheSize .get ();
627
632
}
628
633
629
634
private int getCacheCount () {
635
+ try {
636
+ mThread .join ();
637
+ } catch (InterruptedException e ) {
638
+ e .printStackTrace ();
639
+ }
630
640
return cacheCount .get ();
631
641
}
632
642
0 commit comments