diff --git a/CHANGELOG.md b/CHANGELOG.md index 6717a1d..25ce890 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,10 @@ - .jpg .png .gif解码功能使用taskpool实现 - 修复了内存缓存张数设置为1时gif图片消失的问题 - 新增内存缓存策略,新增缓存张数,缓存大小设置接口 - +- 磁盘存缓存setAsync改成同步 +- 部分release释放放在异步 +- requestInStream的回调改成异步 +- 修复tasktool出现crash问题 ## 2.1.1-rc.4 diff --git a/entry/oh-package.json5 b/entry/oh-package.json5 index f371f22..af3459d 100644 --- a/entry/oh-package.json5 +++ b/entry/oh-package.json5 @@ -4,7 +4,7 @@ "name": "entry", "description": "example description", "repository": {}, - "version": "2.1.1-rc.4", + "version": "2.1.1-rc.5", "dependencies": { "@ohos/libraryimageknife": "file:../library", "@ohos/disklrucache": "^2.0.2-rc.0", diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeData.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeData.ets index 6cd4753..13b1170 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeData.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeData.ets @@ -138,18 +138,24 @@ export class ImageKnifeData { } release() { + let promise = new Promise((resolve) => { + resolve() + }) if (this.isPixelMap()) { if (this.drawPixelMap != undefined && this.drawPixelMap.imagePixelMap != undefined) { this.drawPixelMap.isLruCacheRelease = true; - if (this.drawPixelMap.isShowOnComponent){ + if (this.drawPixelMap.isShowOnComponent) { return; - }else { - this.drawPixelMap.imagePixelMap.release() - .then(() => { - if (this.drawPixelMap != undefined && this.drawPixelMap.imagePixelMap != undefined) { - this.drawPixelMap.imagePixelMap = undefined; - } - }) + } else { + promise.then(() => { + if (this.drawPixelMap != undefined && this.drawPixelMap.imagePixelMap != undefined) { + this.drawPixelMap.imagePixelMap.release(() => { + if (this.drawPixelMap != undefined && this.drawPixelMap.imagePixelMap != undefined) { + this.drawPixelMap.imagePixelMap = undefined + } + }) + } + }) } LogUtil.info("MemoryLruCache removeMemorySize---- end 释放普通图片:") } @@ -166,7 +172,11 @@ export class ImageKnifeData { for (let i = 0; i < gifFrames.length; i++) { let tempFrame = gifFrames[i]; if (tempFrame.drawPixelMap != undefined) { - tempFrame.drawPixelMap.release() + promise.then(() => { + if (tempFrame.drawPixelMap != undefined) { + tempFrame.drawPixelMap.release() + } + }) } } LogUtil.info("MemoryLruCache removeMemorySize---- end 释放GIF图片:") diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/HttpDownloadClient.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/HttpDownloadClient.ets index e9be823..fbdf359 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/HttpDownloadClient.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/HttpDownloadClient.ets @@ -70,15 +70,14 @@ export class HttpDownloadClient implements IDataFetch { connectTimeout: 60000, // 可选 默认60000ms readTimeout: 0, //可选, 默认为60000ms usingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定 - }, - (err: BusinessError, data: number) => { - if (!err && data == 200) { - - } else { - onError(`HttpDownloadClient has error, http code = ${data}`) - } } - ) + ).then((data)=>{ + if(data == 200) { + + } else { + onError(`HttpDownloadClient has error, http code = ${data}`) + } + }) } catch (err) { onError('HttpDownloadClient catch err request uuid ='+request.uuid) } diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/DiskCacheProxy.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/DiskCacheProxy.ets index e02f161..62816df 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/DiskCacheProxy.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/DiskCacheProxy.ets @@ -41,8 +41,8 @@ export class DiskCacheProxy implements ICache { return this.mDiskLruCache.get(key); } - async putValue(key: string, value: ArrayBuffer) { - await this.mDiskLruCache.setAsync(key, value) + putValue(key: string, value: ArrayBuffer) { + this.mDiskLruCache.set(key, value) } removeValue(key: string): ArrayBuffer{ diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets index 4e605f3..e4a2b3f 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets @@ -466,8 +466,8 @@ export class RequestManager { // 保存二级磁盘缓存 Promise.resolve(source) - .then(async (arraybuffer: ArrayBuffer)=>{ - await this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) + .then((arraybuffer: ArrayBuffer)=>{ + this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) }) .catch( (err:BusinessError)=>{ LogUtil.log('download file is ='+ImageKnifeData.GIF+'and save diskLruCache error ='+ (err as BusinessError)) @@ -480,8 +480,8 @@ export class RequestManager { // 保存二级磁盘缓存 Promise.resolve(source) - .then(async (arraybuffer: ArrayBuffer)=>{ - await this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) + .then((arraybuffer: ArrayBuffer)=>{ + this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) }) .catch((err:BusinessError)=>{ LogUtil.log('download file is ='+ImageKnifeData.SVG+'and save diskLruCache error ='+ (err as BusinessError)) @@ -548,8 +548,8 @@ export class RequestManager { private saveCacheAndDisk(value: PixelMap, filetype:string, onComplete:(value:ImageKnifeData)=>void|PromiseLike, source:ArrayBuffer) { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, value); this.mMemoryCacheProxy.putValue(this.options.generateCacheKey, imageKnifeData); - let save2DiskCache = async (arraybuffer:ArrayBuffer) => { - await this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) + let save2DiskCache = (arraybuffer:ArrayBuffer) => { + this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) // 落盘之后需要主动移除当前request并且调用下一个加载 let removeCurrentAndSearchNextRun = this.options.removeCurrentAndSearchNext removeCurrentAndSearchNextRun(); diff --git a/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets b/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets index 5fc0ea4..e16ceca 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets @@ -26,37 +26,7 @@ export class ParseImageUtil implements IParseImage { // scale(0,1) parseImageThumbnail(scale: number, imageinfo: ArrayBuffer, onCompleteFunction: (value: PixelMap) => void | PromiseLike, onErrorFunction: (reason?: BusinessError | string) => void) { - // taskPoolExecutePixelMap(imageinfo,scale,onCompleteFunction,onErrorFunction); - - let imageSource:image.ImageSource = image.createImageSource(imageinfo); // 步骤一:文件转为pixelMap 然后变换 给Image组件 - imageSource.getImageInfo((err, value) => { - if (err) { - onErrorFunction(err); - return; - } - let hValue = Math.round(value.size.height * scale); - let wValue = Math.round(value.size.width * scale); - let defaultSize:image.Size = { - height: hValue, - width: wValue - }; - - let opts:image.DecodingOptions = { - editable: true, - desiredSize: defaultSize - }; - imageSource.createPixelMap(opts, (err, pixelmap) => { - if (err) { - onErrorFunction(err); - } else { - onCompleteFunction(pixelmap); - } - imageSource.release() - }) - - }) - - + taskPoolExecutePixelMap(imageinfo,scale,onCompleteFunction,onErrorFunction); } } @@ -86,6 +56,7 @@ async function taskParseImage(arrayBuffer: ArrayBuffer,scale: number): Promise

void | PromiseLike, onErrorFunction: (reason?: BusinessError | string) => void) { LogUtil.log("ceshi321 : arrayBuffer长度" + arrayBuffer.byteLength) let task = new taskpool.Task(taskParseImage, arrayBuffer,scale) + task.setTransferList([]) taskpool.execute(task).then((pixelmap: image.PixelMap) => { LogUtil.log('ceshi321 : Succeeded in creating pixelmap Ui .' + pixelmap.getPixelBytesNumber()) onCompleteFunction(pixelmap);