diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ec29f2..b3ecc5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ ## 3.0.0-rc.6 - 支持多种组合变换 +- 支持全局配置是否在子线程请求加载图片,默认在子线程 - 文件缓存初始化增加默认值 - 预加载接口新增返回加载错误信息 - 加载队列改为使用堆Stack diff --git a/library/src/main/ets/ImageKnife.ets b/library/src/main/ets/ImageKnife.ets index d33d65c..19b4d08 100644 --- a/library/src/main/ets/ImageKnife.ets +++ b/library/src/main/ets/ImageKnife.ets @@ -35,6 +35,9 @@ export class ImageKnife { // 文件缓存 private fileCache?: FileCache private dispatcher: ImageKnifeDispatcher = new ImageKnifeDispatcher() + // 配置全局是否在子线程加载图片请求 + private _isRequestInSubThread: boolean = true; + headerMap: Map = new Map(); //定义全局map public static getInstance(): ImageKnife { @@ -47,6 +50,15 @@ export class ImageKnife { private constructor() { } + public set isRequestInSubThread(value: boolean) { + this._isRequestInSubThread = value; + } + + public get isRequestInSubThread(): boolean { + return this._isRequestInSubThread; + } + + /** * 初始化文件缓存 * @param context 上下文 diff --git a/library/src/main/ets/ImageKnifeDispatcher.ets b/library/src/main/ets/ImageKnifeDispatcher.ets index 6937419..c3682bf 100644 --- a/library/src/main/ets/ImageKnifeDispatcher.ets +++ b/library/src/main/ets/ImageKnifeDispatcher.ets @@ -39,6 +39,7 @@ import { RequestJobRequest } from './model/ImageKnifeData' import { combineArrayBuffers } from './model/utils'; +import { BusinessError } from '@kit.BasicServicesKit'; export class ImageKnifeDispatcher { // 最大并发 @@ -51,7 +52,7 @@ export class ImageKnifeDispatcher { private engineKey: IEngineKey = new DefaultEngineKey(); showFromMemomry(request: ImageKnifeRequest, imageSrc: string | PixelMap | Resource, requestSource: ImageKnifeRequestSource): boolean { - LogUtil.log("ImageKnife_DataTime_showFromMemomry.start:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_showFromMemomry.start:" + request.imageKnifeOption.loadSrc) let memoryCache: ImageKnifeData | undefined; if ((typeof (request.imageKnifeOption.loadSrc as image.PixelMap).isEditable) == 'boolean') { memoryCache = { @@ -71,27 +72,27 @@ export class ImageKnifeDispatcher { // 回调请求开始 if (requestSource === ImageKnifeRequestSource.SRC && request.imageKnifeOption.onLoadListener?.onLoadStart !== undefined) { request.imageKnifeOption.onLoadListener?.onLoadStart() - LogUtil.log("ImageKnife_DataTime_MemoryCache_onLoadStart:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_MemoryCache_onLoadStart:" + request.imageKnifeOption.loadSrc) } - LogUtil.log("ImageKnife_DataTime_MemoryCache_showPixelMap.start:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_MemoryCache_showPixelMap.start:" + request.imageKnifeOption.loadSrc) request.ImageKnifeRequestCallback?.showPixelMap(request.componentVersion, memoryCache.source, requestSource) - LogUtil.log("ImageKnife_DataTime_MemoryCache_showPixelMap.end:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_MemoryCache_showPixelMap.end:" + request.imageKnifeOption.loadSrc) if (requestSource == ImageKnifeRequestSource.SRC) { request.requestState = ImageKnifeRequestState.COMPLETE // 回调请求开结束 if (request.imageKnifeOption.onLoadListener?.onLoadSuccess !== undefined) { request.imageKnifeOption.onLoadListener?.onLoadSuccess(memoryCache.source,memoryCache.imageWidth,memoryCache.imageHeight) - LogUtil.log("ImageKnife_DataTime_MemoryCache_onLoadSuccess:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_MemoryCache_onLoadSuccess:" + request.imageKnifeOption.loadSrc) } } else if (requestSource == ImageKnifeRequestSource.ERROR_HOLDER) { request.requestState = ImageKnifeRequestState.ERROR } } - LogUtil.log("ImageKnife_DataTime_showFromMemomry.end_true:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_showFromMemomry.end_true:" + request.imageKnifeOption.loadSrc) return true } - LogUtil.log("ImageKnife_DataTime_showFromMemomry.end_false:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_showFromMemomry.end_false:" + request.imageKnifeOption.loadSrc) return false } @@ -112,7 +113,7 @@ export class ImageKnifeDispatcher { } executeJob(request: ImageKnifeRequest): void { - LogUtil.log("ImageKnife_DataTime_executeJob.start:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_executeJob.start:" + request.imageKnifeOption.loadSrc) // 加载占位符 if (request.imageKnifeOption.placeholderSrc !== undefined) { if (this.showFromMemomry(request, request.imageKnifeOption.placeholderSrc, ImageKnifeRequestSource.PLACE_HOLDER) === false) { @@ -122,14 +123,14 @@ export class ImageKnifeDispatcher { // 加载主图 this.getAndShowImage(request, request.imageKnifeOption.loadSrc, ImageKnifeRequestSource.SRC) - LogUtil.log("ImageKnife_DataTime_executeJob.end:"+request.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_executeJob.end:" + request.imageKnifeOption.loadSrc) } /** * 获取和显示图片 */ getAndShowImage(currentRequest: ImageKnifeRequest, imageSrc: string | PixelMap | Resource, requestSource: ImageKnifeRequestSource): void { - LogUtil.log("ImageKnife_DataTime_getAndShowImage.start:"+currentRequest.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_getAndShowImage.start:" + currentRequest.imageKnifeOption.loadSrc) let memoryKey: string = this.engineKey.generateMemoryKey(imageSrc, requestSource, currentRequest.imageKnifeOption) let requestList: List | undefined = this.executingJobMap.get(memoryKey) if (requestList == undefined) { @@ -141,6 +142,19 @@ export class ImageKnifeDispatcher { return } + let isWatchProgress : boolean = false + + // 回调请求开始 + requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => { + if (requestWithSource.source === ImageKnifeRequestSource.SRC && requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadStart !== undefined) { + requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadStart() + LogUtil.log("ImageKnife_DataTime_getAndShowImage_onLoadStart:" + currentRequest.imageKnifeOption.loadSrc) + } + if (requestWithSource.request.imageKnifeOption.progressListener !== undefined && requestWithSource.source === ImageKnifeRequestSource.SRC) { + isWatchProgress = true + } + }); + let request: RequestJobRequest = { context: currentRequest.context, src: imageSrc, @@ -155,118 +169,158 @@ export class ImageKnifeDispatcher { .isFileCacheInit() ? currentRequest.imageKnifeOption.writeCacheStrategy : CacheStrategy.Memory, // 未初始化文件缓存时,不写文件缓存 engineKey: this.engineKey, signature: currentRequest.imageKnifeOption.signature, - requestSource - } - // 启动线程下载和解码主图 - LogUtil.log("ImageKnife_DataTime_getAndShowImage_Task.start:"+currentRequest.imageKnifeOption.loadSrc) - let task = new taskpool.Task(requestJob, request) - LogUtil.log("ImageKnife_DataTime_getAndShowImage_Task.end:"+currentRequest.imageKnifeOption.loadSrc) - // 监听网络回调事件 - if (currentRequest.imageKnifeOption.progressListener !== undefined && requestSource === ImageKnifeRequestSource.SRC) { - let progressCallBack = currentRequest.imageKnifeOption.progressListener - emitter.on(Constants.PROGRESS_EMITTER, (data) => { - progressCallBack(data?.data?.value as number) - }); + requestSource: requestSource, + isWatchProgress: isWatchProgress, + memoryKey: memoryKey } - // 回调请求开始 - requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => { - if (requestWithSource.source === ImageKnifeRequestSource.SRC && requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadStart !== undefined) { - requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadStart() - LogUtil.log("ImageKnife_DataTime_getAndShowImage_onLoadStart:"+currentRequest.imageKnifeOption.loadSrc) - } - }); - - LogUtil.log("ImageKnife_DataTime_getAndShowImage_execute.start:"+currentRequest.imageKnifeOption.loadSrc) - taskpool.execute(task).then((res: Object) => { - LogUtil.log("ImageKnife_DataTime_getAndShowImage_CallBack.start:"+currentRequest.imageKnifeOption.loadSrc) - let requestJobResult = res as RequestJobResult - let pixelmap = requestJobResult === undefined ? undefined : requestJobResult.pixelMap - if (pixelmap === undefined) { - if (requestList !== undefined) { - requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => { - // 回调请求失败 - if (requestWithSource.source === ImageKnifeRequestSource.SRC && requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadFailed !== undefined && requestJobResult.loadFail){ - requestWithSource.request.imageKnifeOption.onLoadListener.onLoadFailed(requestJobResult.loadFail); - LogUtil.log("ImageKnife_DataTime_getAndShowImage_onLoadFailed:"+currentRequest.imageKnifeOption.loadSrc) - } - if (requestWithSource.source === ImageKnifeRequestSource.SRC && requestWithSource.request.imageKnifeOption.errorholderSrc !== undefined) { - - if (this.showFromMemomry(currentRequest, requestWithSource.request.imageKnifeOption.errorholderSrc, ImageKnifeRequestSource.ERROR_HOLDER) === false) { - this.getAndShowImage(currentRequest, requestWithSource.request.imageKnifeOption.errorholderSrc, ImageKnifeRequestSource.ERROR_HOLDER) - } - } - }); - this.executingJobMap.remove(memoryKey) - } - else { - LogUtil.log("error: no requestlist need to draw for key = " + memoryKey) - } - return; - } - // 保存文件缓存 - if (requestJobResult.bufferSize > 0 && currentRequest.imageKnifeOption.writeCacheStrategy !== CacheStrategy.Memory) { - LogUtil.log("ImageKnife_DataTime_getAndShowImage_saveWithoutWriteFile.start:"+currentRequest.imageKnifeOption.loadSrc) - ImageKnife.getInstance().saveWithoutWriteFile(requestJobResult.fileKey, requestJobResult.bufferSize) - LogUtil.log("ImageKnife_DataTime_getAndShowImage_saveWithoutWriteFile.end:"+currentRequest.imageKnifeOption.loadSrc) - } - - let ImageKnifeData: ImageKnifeData = { - source: pixelmap!, - imageWidth: requestJobResult.size == undefined ? 0 : requestJobResult.size.width, - imageHeight: requestJobResult.size == undefined ? 0 : requestJobResult.size.height - } - - // 保存内存缓存 - if (currentRequest.imageKnifeOption.writeCacheStrategy !== CacheStrategy.File) { - LogUtil.log("ImageKnife_DataTime_getAndShowImage_saveMemoryCache.start:"+currentRequest.imageKnifeOption.loadSrc) - ImageKnife.getInstance() - .saveMemoryCache(this.engineKey.generateMemoryKey(imageSrc, requestSource, currentRequest.imageKnifeOption), - ImageKnifeData) - LogUtil.log("ImageKnife_DataTime_getAndShowImage_saveMemoryCache.end:"+currentRequest.imageKnifeOption.loadSrc) - } - if (requestList !== undefined) { - - // todo 判断request生命周期,已销毁的不需要再绘制 - // key相同的request,一起绘制 - requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => { - if (requestWithSource.request.requestState === ImageKnifeRequestState.DESTROY) { - return - } - // 画主图 - if (requestWithSource.source === ImageKnifeRequestSource.SRC || requestWithSource.source === ImageKnifeRequestSource.ERROR_HOLDER - || (requestWithSource.source === ImageKnifeRequestSource.PLACE_HOLDER && requestWithSource.request.requestState === ImageKnifeRequestState.PROGRESS)) { - LogUtil.log("ImageKnife_DataTime_getAndShowImage_showPixelMap.start:"+currentRequest.imageKnifeOption.loadSrc) - requestWithSource.request.ImageKnifeRequestCallback.showPixelMap(requestWithSource.request.componentVersion, ImageKnifeData.source, requestWithSource.source) - LogUtil.log("ImageKnife_DataTime_getAndShowImage_showPixelMap.end:"+currentRequest.imageKnifeOption.loadSrc) - } - - if (requestWithSource.source == ImageKnifeRequestSource.SRC) { - requestWithSource.request.requestState = ImageKnifeRequestState.COMPLETE - if (requestWithSource.request.imageKnifeOption.onLoadListener && requestWithSource.request.imageKnifeOption.onLoadListener.onLoadSuccess) { - // 回调请求成功 - requestWithSource.request.imageKnifeOption.onLoadListener.onLoadSuccess(ImageKnifeData.source,ImageKnifeData.imageWidth,ImageKnifeData.imageHeight); - LogUtil.log("ImageKnife_DataTime_getAndShowImage_onLoadSuccess:"+currentRequest.imageKnifeOption.loadSrc) - } - } else if (requestWithSource.source == ImageKnifeRequestSource.ERROR_HOLDER) { - requestWithSource.request.requestState = ImageKnifeRequestState.ERROR - } + if (ImageKnife.getInstance().isRequestInSubThread){ + // 启动线程下载和解码主图 + LogUtil.log("ImageKnife_DataTime_getAndShowImage_Task.start:" + currentRequest.imageKnifeOption.loadSrc) + let task = new taskpool.Task(requestJob, request) + LogUtil.log("ImageKnife_DataTime_getAndShowImage_Task.end:" + currentRequest.imageKnifeOption.loadSrc) + if (isWatchProgress){ + emitter.on(Constants.PROGRESS_EMITTER + memoryKey, (data) => { + this.progressCallBack(requestList! , data?.data?.value as number) }); + } - this.executingJobMap.remove(memoryKey) - this.dispatchNextJob() - } - else { - LogUtil.log("error: no requestlist need to draw for key = " + memoryKey) - } - // }) - LogUtil.log("ImageKnife_DataTime_getAndShowImage_CallBack.end:"+currentRequest.imageKnifeOption.loadSrc) - }); - LogUtil.log("ImageKnife_DataTime_getAndShowImage_execute.end:"+currentRequest.imageKnifeOption.loadSrc) - LogUtil.log("ImageKnife_DataTime_getAndShowImage.end:"+currentRequest.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_getAndShowImage_execute.start:" + currentRequest.imageKnifeOption.loadSrc) + taskpool.execute(task).then((res: Object) => { + this.doTaskCallback(res as RequestJobResult | undefined, requestList!, currentRequest, memoryKey, imageSrc, requestSource); + if (isWatchProgress){ + emitter.off(Constants.PROGRESS_EMITTER + memoryKey) + } + LogUtil.log("ImageKnife_DataTime_getAndShowImage_execute.end:"+currentRequest.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_getAndShowImage.end:"+currentRequest.imageKnifeOption.loadSrc) + }).catch((err:BusinessError)=>{ + LogUtil.error("Fail to execute in sub thread src=" + imageSrc + " err=" + err) + if (isWatchProgress){ + emitter.off(Constants.PROGRESS_EMITTER + memoryKey) + } + this.executingJobMap.remove(memoryKey); + this.dispatchNextJob(); + }) + } else { //主线程请求 + requestJob(request, requestList).then((res: RequestJobResult | undefined) => { + this.doTaskCallback(res, requestList!, currentRequest, memoryKey, imageSrc, requestSource); + LogUtil.log("ImageKnife_DataTime_getAndShowImage_execute.end:"+currentRequest.imageKnifeOption.loadSrc) + LogUtil.log("ImageKnife_DataTime_getAndShowImage.end:"+currentRequest.imageKnifeOption.loadSrc) + }).catch((err:BusinessError)=>{ + LogUtil.error("Fail to execute in main thread src=" + imageSrc + " err=" + err) + this.executingJobMap.remove(memoryKey); + this.dispatchNextJob(); + }) + } } + /** + * 回调下载进度 + * @param requestList 请求列表 + * @param data 进度 + */ + private progressCallBack(requestList:List, data: number) { + for (let i = 0; i < requestList.length; i++) { + let requestWithSource:ImageKnifeRequestWithSource = requestList[i] + if (requestWithSource.request.imageKnifeOption.progressListener !== undefined && requestWithSource.source === ImageKnifeRequestSource.SRC) { + requestWithSource.request.imageKnifeOption.progressListener(data) + } + } + } + + private doTaskCallback(requestJobResult: RequestJobResult | undefined, requestList: List , + currentRequest: ImageKnifeRequest, memoryKey: string, imageSrc: string | PixelMap | Resource, requestSource: ImageKnifeRequestSource):void { + LogUtil.log("ImageKnife_DataTime_getAndShowImage_CallBack.start:"+currentRequest.imageKnifeOption.loadSrc) + if (requestJobResult === undefined){ + return + } + let pixelmap = requestJobResult.pixelMap; + if (pixelmap === undefined) { + requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => { + // 回调请求失败 + if (requestWithSource.source === ImageKnifeRequestSource.SRC && + requestWithSource.request.imageKnifeOption.onLoadListener?.onLoadFailed !== undefined && + requestJobResult.loadFail) { + requestWithSource.request.imageKnifeOption.onLoadListener.onLoadFailed(requestJobResult.loadFail); + LogUtil.log("ImageKnife_DataTime_getAndShowImage_onLoadFailed:"+currentRequest.imageKnifeOption.loadSrc) + } + if (requestWithSource.source === ImageKnifeRequestSource.SRC && + requestWithSource.request.imageKnifeOption.errorholderSrc !== undefined) { + + if (this.showFromMemomry(currentRequest, requestWithSource.request.imageKnifeOption.errorholderSrc, + ImageKnifeRequestSource.ERROR_HOLDER) === false) { + this.getAndShowImage(currentRequest, requestWithSource.request.imageKnifeOption.errorholderSrc, + ImageKnifeRequestSource.ERROR_HOLDER); + } + } + }); + this.executingJobMap.remove(memoryKey); + return; + } + // 保存文件缓存 + if (requestJobResult.bufferSize > 0 && currentRequest.imageKnifeOption.writeCacheStrategy !== CacheStrategy.Memory) { + LogUtil.log("ImageKnife_DataTime_getAndShowImage_saveWithoutWriteFile.start:"+currentRequest.imageKnifeOption.loadSrc) + ImageKnife.getInstance().saveWithoutWriteFile(requestJobResult.fileKey, requestJobResult.bufferSize); + LogUtil.log("ImageKnife_DataTime_getAndShowImage_saveWithoutWriteFile.end:"+currentRequest.imageKnifeOption.loadSrc) + } + + let ImageKnifeData: ImageKnifeData = { + source: pixelmap!, + imageWidth: 0, + imageHeight: 0 + }; + + // 保存内存缓存 + if (currentRequest.imageKnifeOption.writeCacheStrategy !== CacheStrategy.File) { + LogUtil.log("ImageKnife_DataTime_getAndShowImage_saveMemoryCache.start:"+currentRequest.imageKnifeOption.loadSrc) + ImageKnife.getInstance() + .saveMemoryCache(this.engineKey.generateMemoryKey(imageSrc, requestSource, currentRequest.imageKnifeOption), + ImageKnifeData); + LogUtil.log("ImageKnife_DataTime_getAndShowImage_saveMemoryCache.end:"+currentRequest.imageKnifeOption.loadSrc) + } + if (requestList !== undefined) { + + // todo 判断request生命周期,已销毁的不需要再绘制 + // key相同的request,一起绘制 + requestList.forEach((requestWithSource: ImageKnifeRequestWithSource) => { + if (requestWithSource.request.requestState === ImageKnifeRequestState.DESTROY) { + return; + } + // 画主图 + if (requestWithSource.source === ImageKnifeRequestSource.SRC || + requestWithSource.source === ImageKnifeRequestSource.ERROR_HOLDER + || (requestWithSource.source === ImageKnifeRequestSource.PLACE_HOLDER && + requestWithSource.request.requestState === ImageKnifeRequestState.PROGRESS)) { + LogUtil.log("ImageKnife_DataTime_getAndShowImage_showPixelMap.start:"+currentRequest.imageKnifeOption.loadSrc) + requestWithSource.request.ImageKnifeRequestCallback.showPixelMap(requestWithSource.request.componentVersion, + ImageKnifeData.source, requestWithSource.source); + LogUtil.log("ImageKnife_DataTime_getAndShowImage_showPixelMap.end:"+currentRequest.imageKnifeOption.loadSrc) + } + + if (requestWithSource.source == ImageKnifeRequestSource.SRC) { + requestWithSource.request.requestState = ImageKnifeRequestState.COMPLETE; + if (requestWithSource.request.imageKnifeOption.onLoadListener && + requestWithSource.request.imageKnifeOption.onLoadListener.onLoadSuccess) { + // 回调请求成功 + requestWithSource.request.imageKnifeOption.onLoadListener.onLoadSuccess(ImageKnifeData.source); + LogUtil.log("ImageKnife_DataTime_getAndShowImage_onLoadSuccess:"+currentRequest.imageKnifeOption.loadSrc) + } + } else if (requestWithSource.source == ImageKnifeRequestSource.ERROR_HOLDER) { + requestWithSource.request.requestState = ImageKnifeRequestState.ERROR; + } + + }); + + this.executingJobMap.remove(memoryKey); + this.dispatchNextJob(); + } else { + LogUtil.log("error: no requestlist need to draw for key = " + memoryKey); + } + LogUtil.log("ImageKnife_DataTime_getAndShowImage_CallBack.end:"+currentRequest.imageKnifeOption.loadSrc) + } + + dispatchNextJob() { LogUtil.log("ImageKnife_DataTime_dispatchNextJob.start") while (true) { @@ -304,8 +358,8 @@ export class ImageKnifeDispatcher { * @returns */ @Concurrent -async function requestJob(request: RequestJobRequest): Promise { - LogUtil.log("ImageKnife_DataTime_requestJob.start:"+request.src) +async function requestJob(request: RequestJobRequest, requestList?: List): Promise { + LogUtil.log("ImageKnife_DataTime_requestJob.start:" + request.src) let resBuf: ArrayBuffer | undefined let bufferSize: number = 0 let loadError: string = ''; @@ -365,16 +419,28 @@ async function requestJob(request: RequestJobRequest): Promise { - // 下载进度 - if (data != undefined && (typeof data.receiveSize == 'number') && (typeof data.totalSize == 'number')) { - let percent = Math.round(((data.receiveSize * 1.0) / (data.totalSize * 1.0)) * 100) - if (progress !== percent) { - progress = percent - emitter.emit(Constants.PROGRESS_EMITTER, { data: { "value": progress } }) + if (request.isWatchProgress) { + httpRequest.on('dataReceiveProgress', (data: RequestData) => { + // 下载进度 + if (data != undefined && (typeof data.receiveSize == 'number') && (typeof data.totalSize == 'number')) { + let percent = Math.round(((data.receiveSize * 1.0) / (data.totalSize * 1.0)) * 100) + if (progress !== percent) { + progress = percent + if (requestList === undefined) { + // 子线程 + emitter.emit(Constants.PROGRESS_EMITTER + request.memoryKey, { data: { "value": progress } }) + }else { + // 主线程请求 + requestList!.forEach((requestWithSource: ImageKnifeRequestWithSource) => { + if (requestWithSource.request.imageKnifeOption.progressListener !== undefined && requestWithSource.source === ImageKnifeRequestSource.SRC) { + requestWithSource.request.imageKnifeOption.progressListener(progress) + } + }) + } + } } - } - }) + }) + } await promise.then((data: number) => { if (data == 200) { diff --git a/library/src/main/ets/model/ImageKnifeData.ets b/library/src/main/ets/model/ImageKnifeData.ets index 10cd14f..24104f3 100644 --- a/library/src/main/ets/model/ImageKnifeData.ets +++ b/library/src/main/ets/model/ImageKnifeData.ets @@ -80,5 +80,7 @@ export interface RequestJobRequest { writeCacheStrategy?: CacheStrategy signature?: string engineKey: IEngineKey + isWatchProgress: boolean + memoryKey: string }