From 4a08602dadd4ade2d6bc420f687e094d33a8e6ce Mon Sep 17 00:00:00 2001 From: zenggaofeng Date: Mon, 18 Mar 2024 15:42:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=9A=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E4=BC=98=E5=85=88=E7=BA=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zenggaofeng --- CHANGELOG.md | 1 + .../ets/pages/imageknifeTestCaseIndex.ets | 6 +- .../main/ets/pages/testPriorityComponent.ets | 80 +++++++++++++++++++ .../resources/base/profile/main_pages.json | 3 +- library/index.ets | 2 +- .../ets/components/imageknife/ImageKnife.ets | 4 +- .../imageknife/ImageKnifeComponent.ets | 3 + .../imageknife/ImageKnifeOption.ets | 4 +- .../components/imageknife/RequestOption.ets | 12 ++- .../ets/components/imageknife/TaskParams.ets | 3 +- sharedlibrary/src/main/ets/Index.ets | 2 +- 11 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 entry/src/main/ets/pages/testPriorityComponent.ets diff --git a/CHANGELOG.md b/CHANGELOG.md index eb2e0fd..d2955ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - 修复单帧gif图片加载失败 - removeRunning删除running队列log设置开关 - 绘制图片调用getImageInfo改用同步接口getImageInfoSync +- 新增多线程优先级功能 ## 2.1.2-rc.10 - 修复部分gif图片识别成静态图 diff --git a/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets b/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets index 1cc2ca2..4a4a713 100644 --- a/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets +++ b/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets @@ -36,7 +36,11 @@ struct IndexFunctionDemo { console.log("测试文件子系统") router.pushUrl({ url: "pages/basicTestFileIOPage" }); }).margin({ top: 5, left: 3 }) - + Button("优先级加载") + .onClick(() => { + console.log("优先级加载") + router.pushUrl({ url: "pages/testPriorityComponent" }); + }).margin({ top: 5, left: 3 }) }.width('100%').height(60).backgroundColor(Color.Pink) Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Button("测试全球化") diff --git a/entry/src/main/ets/pages/testPriorityComponent.ets b/entry/src/main/ets/pages/testPriorityComponent.ets new file mode 100644 index 0000000..9fd91a1 --- /dev/null +++ b/entry/src/main/ets/pages/testPriorityComponent.ets @@ -0,0 +1,80 @@ +import { ImageKnifeComponent , Priority , NONE } from '@ohos/libraryimageknife' + +@Entry +@Component +struct TestPriorityComponent { + private data: string[] = [ + "http://e.hiphotos.baidu.com/image/pic/item/a1ec08fa513d2697e542494057fbb2fb4316d81e.jpg", + "http://c.hiphotos.baidu.com/image/pic/item/30adcbef76094b36de8a2fe5a1cc7cd98d109d99.jpg", + "http://h.hiphotos.baidu.com/image/pic/item/7c1ed21b0ef41bd5f2c2a9e953da81cb39db3d1d.jpg", + "http://g.hiphotos.baidu.com/image/pic/item/55e736d12f2eb938d5277fd5d0628535e5dd6f4a.jpg", + "http://e.hiphotos.baidu.com/image/pic/item/4e4a20a4462309f7e41f5cfe760e0cf3d6cad6ee.jpg", + "http://b.hiphotos.baidu.com/image/pic/item/9d82d158ccbf6c81b94575cfb93eb13533fa40a2.jpg", + "http://e.hiphotos.baidu.com/image/pic/item/4bed2e738bd4b31c1badd5a685d6277f9e2ff81e.jpg", + "http://g.hiphotos.baidu.com/image/pic/item/0d338744ebf81a4c87a3add4d52a6059252da61e.jpg", + "http://a.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee5080c8142ff5e0fe99257e19.jpg", + "http://f.hiphotos.baidu.com/image/pic/item/4034970a304e251f503521f5a586c9177e3e53f9.jpg", + "http://b.hiphotos.baidu.com/image/pic/item/279759ee3d6d55fbb3586c0168224f4a20a4dd7e.jpg", + "http://img2.xkhouse.com/bbs/hfhouse/data/attachment/forum/corebbs/2009-11/2009113011534566298.jpg", + "http://a.hiphotos.baidu.com/image/pic/item/e824b899a9014c087eb617650e7b02087af4f464.jpg", + "http://c.hiphotos.baidu.com/image/pic/item/9c16fdfaaf51f3de1e296fa390eef01f3b29795a.jpg", + "http://d.hiphotos.baidu.com/image/pic/item/b58f8c5494eef01f119945cbe2fe9925bc317d2a.jpg", + "http://h.hiphotos.baidu.com/image/pic/item/902397dda144ad340668b847d4a20cf430ad851e.jpg", + "http://b.hiphotos.baidu.com/image/pic/item/359b033b5bb5c9ea5c0e3c23d139b6003bf3b374.jpg", + "http://a.hiphotos.baidu.com/image/pic/item/8d5494eef01f3a292d2472199d25bc315d607c7c.jpg", + "http://b.hiphotos.baidu.com/image/pic/item/e824b899a9014c08878b2c4c0e7b02087af4f4a3.jpg", + "http://g.hiphotos.baidu.com/image/pic/item/6d81800a19d8bc3e770bd00d868ba61ea9d345f2.jpg", + "https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB", + 'https://img-blog.csdnimg.cn/20191215043500229.png', + 'https://img-blog.csdn.net/20140514114029140', + 'https://hbimg.huabanimg.com/95a6d37a39aa0b70d48fa18dc7df8309e2e0e8e85571e-x4hhks_fw658/format/webp' + ] + + build(){ + Column(){ + Grid(){ + ForEach(this.data,(item:string,index:number)=>{ + GridItem(){ + if(index % 2 == 0){ + ImageKnifeComponent({ + imageKnifeOption:{ + loadSrc:item, + placeholderSrc:$r('app.media.icon_loading'), + strategy:new NONE(), + isCacheable:false, + priority:Priority.LOW + } + }) + } else if (index % 3 == 0) { + ImageKnifeComponent({ + imageKnifeOption:{ + loadSrc:item, + placeholderSrc:$r('app.media.icon_loading'), + strategy:new NONE(), + isCacheable:false, + priority:Priority.MEDIUM + } + }) + } else { + ImageKnifeComponent({ + imageKnifeOption:{ + loadSrc:item, + placeholderSrc:$r('app.media.icon_loading'), + strategy:new NONE(), + isCacheable:false, + priority:Priority.HIGH + } + }) + } + } + }) + } + .width("100%") + .height("100%") + .columnsTemplate("1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr") + .rowsTemplate("1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr") + .columnsGap(10) + .backgroundColor(0xFAEEE0) + }.width("100%").height("100%").backgroundColor(Color.Pink) + } +} \ No newline at end of file diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index 3670de9..9048879 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -40,6 +40,7 @@ "pages/testImageKnifeRouter1", "pages/testImageKnifeRouter2", "pages/RequestOptionLoadImage", - "pages/testImageKnifeHttpRequestHeader" + "pages/testImageKnifeHttpRequestHeader", + "pages/testPriorityComponent" ] } \ No newline at end of file diff --git a/library/index.ets b/library/index.ets index 4edcd48..061b4db 100644 --- a/library/index.ets +++ b/library/index.ets @@ -98,7 +98,7 @@ export { UPNG } from './src/main/ets/components/3rd_party/upng/UPNG' export { ImageKnife } from './src/main/ets/components/imageknife/ImageKnife' export { ImageKnifeGlobal } from './src/main/ets/components/imageknife/ImageKnifeGlobal' export { ObjectKey } from './src/main/ets/components/imageknife/ObjectKey' -export {RequestOption,Size,DetachFromLayout} from './src/main/ets/components/imageknife/RequestOption' +export {RequestOption,Size,DetachFromLayout,Priority} from './src/main/ets/components/imageknife/RequestOption' export { ImageKnifeComponent, ScaleType, ScaleTypeHelper, AntiAliasing} from './src/main/ets/components/imageknife/ImageKnifeComponent' export { ImageKnifeDrawFactory } from './src/main/ets/components/imageknife/ImageKnifeDrawFactory' export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions,HeaderOptions} from './src/main/ets/components/imageknife/ImageKnifeOption' diff --git a/library/src/main/ets/components/imageknife/ImageKnife.ets b/library/src/main/ets/components/imageknife/ImageKnife.ets index 380bfce..dd58cd5 100644 --- a/library/src/main/ets/components/imageknife/ImageKnife.ets +++ b/library/src/main/ets/components/imageknife/ImageKnife.ets @@ -540,6 +540,7 @@ export class ImageKnife { usageType: usageType, displayProgress: displayProgress, uuid: request.uuid, + priority:request.priority, dontAnimateFlag: request.dontAnimateFlag, generateCacheKey: request.generateCacheKey, generateResourceKey: request.generateResourceKey, @@ -598,7 +599,7 @@ export class ImageKnife { request.progressFunc.asyncSuccess(percent); } }); - taskpool.execute(task).then((data) => { + taskpool.execute(task,request.priority).then((data) => { if (usageType == Constants.PLACE_HOLDER) { if ((typeof (data as PixelMap).isEditable) == 'boolean') { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, data as PixelMap); @@ -728,6 +729,7 @@ async function taskExecute(taskParams: TaskParams, loadSrcJson: string): Promise //子线程构造RequestOption对象 let newRequestOption = new RequestOption(); let loadSrcObj: object = JSON.parse(loadSrcJson); + newRequestOption.priority = taskParams.priority newRequestOption.uuid = taskParams.uuid; newRequestOption.loadSrc = loadSrcObj["loadSrc"] as string | PixelMap | Resource; newRequestOption.dontAnimateFlag = taskParams.dontAnimateFlag; diff --git a/library/src/main/ets/components/imageknife/ImageKnifeComponent.ets b/library/src/main/ets/components/imageknife/ImageKnifeComponent.ets index 1f2df12..abda59e 100644 --- a/library/src/main/ets/components/imageknife/ImageKnifeComponent.ets +++ b/library/src/main/ets/components/imageknife/ImageKnifeComponent.ets @@ -246,6 +246,9 @@ export struct ImageKnifeComponent { request.signature = new ObjectKey(new Date().getTime().toString()) } } + if( this.imageKnifeOption.priority != undefined) { + request.setPriority(this.imageKnifeOption.priority) + } if (this.imageKnifeOption.placeholderSrc) { request.placeholder(this.imageKnifeOption.placeholderSrc, {asyncSuccess:(data:ImageKnifeData) => { LogUtil.log('ImageKnife ImageKnifeComponent request.placeholder callback') diff --git a/library/src/main/ets/components/imageknife/ImageKnifeOption.ets b/library/src/main/ets/components/imageknife/ImageKnifeOption.ets index 959bb67..12816a1 100644 --- a/library/src/main/ets/components/imageknife/ImageKnifeOption.ets +++ b/library/src/main/ets/components/imageknife/ImageKnifeOption.ets @@ -26,6 +26,7 @@ import { rgbColor } from './transform/CropCircleWithBorderTransformation' import { RoundCorner } from './transform/RoundedCornersTransformation' import { ObjectKey } from './ObjectKey' import common from '@ohos.app.ability.common' +import { Priority } from './RequestOption' export interface CropCircleWithBorder{ border: number, @@ -72,7 +73,8 @@ export class ImageKnifeOption { // 主图资源 loadSrc: string | PixelMap | Resource = ''; mainScaleType?: ScaleType = ScaleType.FIT_CENTER - + // 优先级 + priority?: Priority = Priority.MEDIUM enableGpu?:boolean = true; // 磁盘缓存策略 diff --git a/library/src/main/ets/components/imageknife/RequestOption.ets b/library/src/main/ets/components/imageknife/RequestOption.ets index b6e3a09..19f8429 100644 --- a/library/src/main/ets/components/imageknife/RequestOption.ets +++ b/library/src/main/ets/components/imageknife/RequestOption.ets @@ -68,7 +68,11 @@ export interface Size { export interface DetachFromLayout { detach: () => void } - +export enum Priority { + HIGH = 0, + MEDIUM = 1, + LOW = 2 +} export class RequestOption { // 遍历添加图片http请求头 headers: Map = new Map(); @@ -82,7 +86,7 @@ export class RequestOption { addHeaderMap(map: Map) { this.headers = map; } - + priority: Priority = Priority.MEDIUM; uuid: string = '' // 唯一标识 loadSrc: string | PixelMap | Resource = ''; strategy: DiskStrategy = new AUTOMATIC(); @@ -158,7 +162,9 @@ export class RequestOption { this.moduleContext = ctx; } } - + setPriority(priority: Priority) { + this.priority = priority + } generateUUID(): string { let d = new Date().getTime(); const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(new RegExp("[xy]", "g"), (c) => { diff --git a/library/src/main/ets/components/imageknife/TaskParams.ets b/library/src/main/ets/components/imageknife/TaskParams.ets index f5df689..0948c6c 100644 --- a/library/src/main/ets/components/imageknife/TaskParams.ets +++ b/library/src/main/ets/components/imageknife/TaskParams.ets @@ -1,5 +1,5 @@ import { ObjectKey } from './ObjectKey'; -import { Size } from '../imageknife/RequestOption' +import { Priority, Size } from '../imageknife/RequestOption' import common from '@ohos.app.ability.common' export class TaskParams { @@ -8,6 +8,7 @@ export class TaskParams { transformations: string [][] = [] usageType: string = '' displayProgress: boolean = false + priority: Priority = Priority.MEDIUM // 优先级 uuid: string = '' // 唯一标识 dontAnimateFlag: boolean = false; thumbSizeMultiplier: number = 0; diff --git a/sharedlibrary/src/main/ets/Index.ets b/sharedlibrary/src/main/ets/Index.ets index dca67d5..fb445f8 100644 --- a/sharedlibrary/src/main/ets/Index.ets +++ b/sharedlibrary/src/main/ets/Index.ets @@ -99,7 +99,7 @@ export { ImageKnife } from '@ohos/imageknife' export { ImageKnifeGlobal } from '@ohos/imageknife' export {RequestOption,Size} from '@ohos/imageknife' export {ObjectKey} from '@ohos/imageknife' -export { ImageKnifeComponent, ScaleType, ScaleTypeHelper, AntiAliasing} from '@ohos/imageknife' +export { ImageKnifeComponent, ScaleType, ScaleTypeHelper, AntiAliasing,Priority} from '@ohos/imageknife' export { ImageKnifeDrawFactory } from '@ohos/imageknife' export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions,HeaderOptions} from '@ohos/imageknife' export { ImageKnifeData } from '@ohos/imageknife'