diff --git a/library/src/main/ets/cache/MemoryLruCache.ets b/library/src/main/ets/cache/MemoryLruCache.ets index 493fc11..aba330f 100644 --- a/library/src/main/ets/cache/MemoryLruCache.ets +++ b/library/src/main/ets/cache/MemoryLruCache.ets @@ -46,6 +46,11 @@ export class MemoryLruCache implements IMemoryCache { throw new Error('key or value is invalid '); } + let size = this.getImageKnifeDataSize(value) + if (size <= 0 && size >= this.maxMemory) { + return + } + // 如果size满了的话,需要按照LRU的方式删除第一个 if (this.lruCache.length == this.maxSize && !this.lruCache.contains(key)) { this.remove(this.lruCache.keys()[0]) @@ -53,12 +58,9 @@ export class MemoryLruCache implements IMemoryCache { this.remove(key) } - let pre: ImageKnifeData = this.lruCache.put(key, value) - this.addMemorySize(value) - // if (pre !== undefined) { // 当前返回不是key的之前value - // this.removeMemorySize(pre) - // } - this.trimToSize(); + this.lruCache.put(key, value) + this.currentMemory += size + this.trimToSize() } get(key: string): ImageKnifeData | undefined { @@ -119,19 +121,21 @@ export class MemoryLruCache implements IMemoryCache { } } - private addMemorySize(value: ImageKnifeData): void { + private getImageKnifeDataSize(value: ImageKnifeData): number { if (value.source != undefined) { if (typeof value.source === 'string' && value.source != "") { - this.currentMemory += value.source.length + return value.source.length } else if (value.source == "") { - for (let index = 0;index < value.imageAnimator!.length;index++) { + let size: number = 0 + for (let index = 0; index < value.imageAnimator!.length; index++) { let pixelMap = value.imageAnimator![index].src as PixelMap - this.currentMemory += pixelMap.getPixelBytesNumber() + size += pixelMap.getPixelBytesNumber() } + return size } else { - this.currentMemory += value.source.getPixelBytesNumber(); + return value.source.getPixelBytesNumber(); } - //LogUtil.log("MemoryCache addMemorySize: " + value.source.getPixelBytesNumber() + " currentMemory:" + this.currentMemory) } + return 0 } } \ No newline at end of file