diff --git a/library/src/main/ets/ImageKnife.ets b/library/src/main/ets/ImageKnife.ets index 10329c4..3888631 100644 --- a/library/src/main/ets/ImageKnife.ets +++ b/library/src/main/ets/ImageKnife.ets @@ -20,7 +20,6 @@ import { FileCache } from './utils/FileCache'; import { ImageKnifeDispatcher } from './ImageKnifeDispatcher'; import { IEngineKey } from './key/IEngineKey'; import { HeaderOptions, ImageKnifeOption } from './ImageKnifeOption'; -import { DefaultEngineKey } from './key/DefaultEngineKey'; import { FileTypeUtil } from './utils/FileTypeUtil'; import { util } from '@kit.ArkTS'; import { image } from '@kit.ImageKit'; @@ -37,8 +36,8 @@ export class ImageKnife { private dispatcher: ImageKnifeDispatcher = new ImageKnifeDispatcher() // 配置全局是否在子线程加载图片请求 private _isRequestInSubThread: boolean = true; - - headerMap: Map = new Map(); //定义全局map + //定义全局网络请求header map + headerMap: Map = new Map(); public static getInstance(): ImageKnife { if (!ImageKnife.instance) { @@ -58,12 +57,12 @@ export class ImageKnife { return this._isRequestInSubThread; } - /** - * 初始化文件缓存 + * 初始化文件缓存个数,大小,以及路径 * @param context 上下文 * @param size 缓存数量 * @param memory 内存大小 + * @param path 文件目录 */ async initFileCache(context: Context, size: number = 256, memory: number = 256 * 1024 * 1024,path?: string) { this.fileCache = new FileCache(context, size, memory) @@ -75,7 +74,7 @@ export class ImageKnife { } /** - * 判断文件缓存是否初始化 + * 判断文件缓存是否已完成初始化 * @returns 是否初始化 */ public isFileCacheInit(): boolean { @@ -83,16 +82,16 @@ export class ImageKnife { } /** - * 全局添加单个请求头 + * 全局添加单个请求头header * @param key 请求头属性 * @param value 请求头值 */ addHeader(key: string, value: Object) { - this.headerMap.set(key, value); + this.headerMap.set(key, value) } /** - * 全局设置请求头调用方法 + * 全局设置请求头header * @param options 请求头数组 */ serHeaderOptions(options: Array) { @@ -102,11 +101,11 @@ export class ImageKnife { } /** - * 删除单个请求头属性 + * 删除单个请求头header * @param key 请求头属性 */ deleteHeader(key: string) { - this.headerMap.delete(key); + this.headerMap.delete(key) } /** @@ -114,7 +113,7 @@ export class ImageKnife { * @param newMemoryCache 自定义内存缓存 */ initMemoryCache(newMemoryCache: IMemoryCache): void { - this.memoryCache + this.memoryCache = newMemoryCache } /** @@ -123,9 +122,11 @@ export class ImageKnife { removeAllMemoryCache(): void { this.memoryCache.removeAll() } - /* + + /** * 清除指定内存缓存 - * */ + * @param url 待清除的url路径或ImageKnifeOption + */ removeMemoryCache(url: string | ImageKnifeOption) { let imageKnifeOption = new ImageKnifeOption(); if (typeof url == 'string') { @@ -137,33 +138,9 @@ export class ImageKnife { this.memoryCache.remove(key); } - loadFromMemoryCache(key: string): ImageKnifeData | undefined { - if (key !== "") { - return this.memoryCache.get(key) - } - return undefined - } - - saveMemoryCache(key: string, data: ImageKnifeData): void { - if (key !== "") { - this.memoryCache.put(key, data) - } - } - - loadFromFileCache(key: string): ArrayBuffer | undefined { - return this.fileCache?.get(key) - } - - saveFileCache(key: string, data: ArrayBuffer): void { - this.fileCache?.put(key, data) - } - - getFileCache(): FileCache { - return this.fileCache as FileCache - } /** - * 预加载到文件缓存 + * 预加载图片到文件缓存 * @param loadSrc 图片地址url * @returns 返回文件缓存路径 */ @@ -233,7 +210,7 @@ export class ImageKnife { } /** - * + * 预加载缓存(用于外部已获取pixelmap,需要加入imageknife缓存的场景) * @param url 图片地址url * @param pixelMap 图片 * @param cacheType 缓存策略 @@ -258,6 +235,74 @@ export class ImageKnife { } } + /** + * 清除所有文件缓存 + * @returns + */ + async removeAllFileCache(): Promise { + if (this.fileCache !== undefined) { + await this.fileCache.removeAll() + } + } + /* + * 清除指定文件缓存 + * */ + removeFileCache(url: string | ImageKnifeOption) { + let imageKnifeOption: ImageKnifeOption; + if (url instanceof ImageKnifeOption) { + imageKnifeOption = url; + } else { + imageKnifeOption = { + loadSrc: url + }; + } + let key = this.getEngineKeyImpl().generateFileKey(imageKnifeOption.loadSrc, imageKnifeOption.signature); + if (this.fileCache !== undefined) { + this.fileCache.remove(key); + } + } + + /** + * 设置taskpool默认并发数量 + * @param concurrency 默认并发数量,默认为8 + */ + setMaxRequests(concurrency: number): void { + this.dispatcher.setMaxRequests(concurrency) + } + + getFileCacheByFile(context: Context, key: string): ArrayBuffer | undefined { + if (this.fileCache !== undefined) { + return FileCache.getFileCacheByFile(context, key) + } + return undefined + } + + loadFromMemoryCache(key: string): ImageKnifeData | undefined { + if (key !== "") { + return this.memoryCache.get(key) + } + return undefined + } + + saveMemoryCache(key: string, data: ImageKnifeData): void { + if (key !== "") { + this.memoryCache.put(key, data) + } + } + + loadFromFileCache(key: string): ArrayBuffer | undefined { + return this.fileCache?.get(key) + } + + saveFileCache(key: string, data: ArrayBuffer): void { + this.fileCache?.put(key, data) + } + + getFileCache(): FileCache { + return this.fileCache as FileCache + } + + private pixelMapToArrayBuffer(pixelMap: PixelMap): ArrayBuffer { let imageInfo = pixelMap.getImageInfoSync(); let readBuffer: ArrayBuffer = new ArrayBuffer(imageInfo.size.height * imageInfo.size.width * 4); @@ -308,33 +353,6 @@ export class ImageKnife { } } - /** - * 清除所有文件缓存 - * @returns - */ - async removeAllFileCache(): Promise { - if (this.fileCache !== undefined) { - await this.fileCache.removeAll() - } - } - /* - * 清除指定文件缓存 - * */ - removeFileCache(url: string | ImageKnifeOption) { - let imageKnifeOption: ImageKnifeOption; - if (url instanceof ImageKnifeOption) { - imageKnifeOption = url; - } else { - imageKnifeOption = { - loadSrc: url - }; - } - let key = this.getEngineKeyImpl().generateFileKey(imageKnifeOption.loadSrc, imageKnifeOption.signature); - if (this.fileCache !== undefined) { - this.fileCache.remove(key); - } - } - saveWithoutWriteFile(key: string, bufferSize: number): void { this.fileCache?.putWithoutWriteFile(key, bufferSize) } @@ -346,13 +364,6 @@ export class ImageKnife { return false } - getFileCacheByFile(context: Context, key: string): ArrayBuffer | undefined { - if (this.fileCache !== undefined) { - return FileCache.getFileCacheByFile(context, key) - } - return undefined - } - async execute(request: ImageKnifeRequest): Promise { LogUtil.log("ImageKnife_DataTime_execute.start:"+request.imageKnifeOption.loadSrc) if (this.headerMap.size > 0) { @@ -362,10 +373,6 @@ export class ImageKnife { LogUtil.log("ImageKnife_DataTime_execute.end:"+request.imageKnifeOption.loadSrc) } - setMaxRequests(concurrency: number): void { - this.dispatcher.setMaxRequests(concurrency) - } - setEngineKeyImpl(impl: IEngineKey): void { this.dispatcher.setEngineKeyImpl(impl); } diff --git a/library/src/main/ets/utils/FileCache.ets b/library/src/main/ets/utils/FileCache.ets index dad888e..4a5fbff 100644 --- a/library/src/main/ets/utils/FileCache.ets +++ b/library/src/main/ets/utils/FileCache.ets @@ -60,8 +60,12 @@ export class FileCache { if (this.isInited) { return } - FileCache.CACHE_FOLDER = path - this.path = this.context?.cacheDir + FileUtils.SEPARATOR + FileCache.CACHE_FOLDER + FileUtils.SEPARATOR + if (this.context && path.startsWith(this.context.cacheDir) === false) { + this.path = path + } else { + FileCache.CACHE_FOLDER = path + this.path = this.context?.cacheDir + FileUtils.SEPARATOR + FileCache.CACHE_FOLDER + FileUtils.SEPARATOR + } await FileUtils.getInstance().createFolder(this.path) // 遍历缓存目录下的文件,按照时间顺序加入缓存 let filenames: string[] = await FileUtils.getInstance().ListFile(this.path)