diff --git a/library/src/main/ets/ImageKnifeDispatcher.ets b/library/src/main/ets/ImageKnifeDispatcher.ets index dfabd32..a6009f3 100644 --- a/library/src/main/ets/ImageKnifeDispatcher.ets +++ b/library/src/main/ets/ImageKnifeDispatcher.ets @@ -32,6 +32,7 @@ import taskpool from '@ohos.taskpool'; import { FileTypeUtil } from './utils/FileTypeUtil'; import util from '@ohos.util'; import { Tools } from './utils/Tools'; +import { SparkMD5 } from './3rd_party/sparkmd5/spark-md5'; export class ImageKnifeDispatcher { // 最大并发 @@ -41,10 +42,43 @@ export class ImageKnifeDispatcher { // 执行中的请求 executingJobMap: LightWeightMap> = new LightWeightMap(); + private keyCache: util.LRUCache = new util.LRUCache(1024) + + showFromMemomry(request: ImageKnifeRequest,imageSrc: string | PixelMap | Resource, requestSource: ImageKnifeRequestSource): boolean { + let memoryCache: ImageKnifeData | undefined = ImageKnife.getInstance() + .loadFromMemoryCache(Tools.generateKey(imageSrc)) + if (memoryCache !== undefined) { + // 画主图 + if (request.requestState === ImageKnifeRequestState.PROGRESS) { + request.ImageKnifeRequestCallback?.showPixelMap(request.componentVersion, memoryCache.source) + + if (requestSource == ImageKnifeRequestSource.SRC) { + request.requestState = ImageKnifeRequestState.COMPLETE + } else if (requestSource == ImageKnifeRequestSource.ERROR_HOLDER) { + request.requestState = ImageKnifeRequestState.ERROR + } + } + return true + } + return false + } + + // 生成唯一的key + generateKey(key: string | PixelMap | Resource): string { + let keyCache = typeof key == "string"? key : JSON.stringify(key) + let result = this.keyCache.get(keyCache) + if(result != undefined) { + return result + } else { + result = SparkMD5.hashBinary(keyCache) + this.keyCache.put(keyCache,result) + return result + } + } enqueue(request: ImageKnifeRequest): void { //1.内存有的话直接渲染 - if (request.showFromMemomry(request.ImageKnifeOption.loadSrc, ImageKnifeRequestSource.SRC)) { + if (this.showFromMemomry(request,request.ImageKnifeOption.loadSrc, ImageKnifeRequestSource.SRC)) { return } @@ -59,7 +93,7 @@ export class ImageKnifeDispatcher { executeJob(request: ImageKnifeRequest): void { // 加载占位符 if (request.ImageKnifeOption.placeholderSrc !== undefined) { - if (request.showFromMemomry(request.ImageKnifeOption.placeholderSrc, ImageKnifeRequestSource.PLACE_HOLDER) === false) { + if (this.showFromMemomry(request,request.ImageKnifeOption.placeholderSrc, ImageKnifeRequestSource.PLACE_HOLDER) === false) { this.getAndShowImage(request, request.ImageKnifeOption.placeholderSrc, ImageKnifeRequestSource.PLACE_HOLDER) } } @@ -107,7 +141,7 @@ export class ImageKnifeDispatcher { requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => { if (requestWithSource.source === ImageKnifeRequestSource.SRC && currentRequest.ImageKnifeOption.errorholderSrc !== undefined) { - if (currentRequest.showFromMemomry(currentRequest.ImageKnifeOption.errorholderSrc, ImageKnifeRequestSource.ERROR_HOLDER) === false) { + if (this.showFromMemomry(currentRequest,currentRequest.ImageKnifeOption.errorholderSrc, ImageKnifeRequestSource.ERROR_HOLDER) === false) { this.getAndShowImage(currentRequest, currentRequest.ImageKnifeOption.errorholderSrc, ImageKnifeRequestSource.ERROR_HOLDER) } } diff --git a/library/src/main/ets/ImageKnifeRequest.ets b/library/src/main/ets/ImageKnifeRequest.ets index 45c5582..892bf43 100644 --- a/library/src/main/ets/ImageKnifeRequest.ets +++ b/library/src/main/ets/ImageKnifeRequest.ets @@ -44,31 +44,6 @@ export class ImageKnifeRequest { this.componentVersion = version this.ImageKnifeRequestCallback = ImageKnifeRequestCallback } - - showFromMemomry(imageSrc: string | PixelMap | Resource, requestSource: ImageKnifeRequestSource): boolean { - let memoryCache: ImageKnifeData | undefined = ImageKnife.getInstance() - .loadFromMemoryCache(Tools.generateKey(this.ImageKnifeOption.loadSrc)) - if (memoryCache !== undefined) { - // 画主图 - if (this.requestState === ImageKnifeRequestState.PROGRESS) { - this.ImageKnifeRequestCallback?.showPixelMap(this.componentVersion, memoryCache.source) - - if (requestSource == ImageKnifeRequestSource.SRC) { - this.requestState = ImageKnifeRequestState.COMPLETE - } else if (requestSource == ImageKnifeRequestSource.ERROR_HOLDER) { - this.requestState = ImageKnifeRequestState.ERROR - } - } - return true - } - return false - } - - // 生成唯一的key - generateKey(key: string | PixelMap | Resource): string { - // todo 补充变换 - return SparkMD5.hashBinary(JSON.stringify(key)) as string - } } export enum ImageKnifeRequestState {