相关问题
#鸿蒙通关秘籍#鸿蒙中如何实现普通对象的跨线程传递?
176浏览 • 1回复 待解决
#鸿蒙通关秘籍#在ArkTS中如何实现SharedArrayBuffer对象的跨线程共享?
338浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙中如何使用转移模式的NativeBinding对象进行跨线程通信?
361浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中通过转移方式传递ArrayBuffer对象?
214浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙开发中如何使用共享模式的NativeBinding对象进行跨线程通信?
317浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现PixelMap对象的深拷贝?
205浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙中如何使用N-API实现线程安全的跨线程函数调用?
234浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何利用Native线程安全函数实现鸿蒙跨线程调用?
267浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在不同线程中操作鸿蒙共享模块中的对象?
280浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中实现跨设备拖拽功能?
353浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统中如何在页面跳转时传递数据?
252浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在C/C++与ArkTS之间进行错误对象的跨语言传递?
269浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何获取已经添加效果的图像的PixelMap对象?
190浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙开发中如何避免线程间数据传递引发的内存泄漏?
236浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何使用@Provide和@Consume实现ArkTS中的跨层级参数传递?
294浏览 • 1回复 待解决
#鸿蒙通关秘籍#怎样在鸿蒙系统中实现跨应用启动ServiceAbility?
328浏览 • 1回复 待解决
复杂JS类对象是否可以支持跨线程共享传递?
825浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS NEXT中利用Navigation实现对象传递?
294浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统中如何转换Native应用信息为JavaScript对象?
276浏览 • 1回复 待解决
#鸿蒙通关秘籍#使用ArkTS实现跨线程任务调度
222浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS NEXT中实现页面跳转时传递类对象?
297浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在HarmonyOS NEXT中通过router跳转并传递复杂对象?
209浏览 • 0回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中为线程设置优先级QoS?
185浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统中如何在C++线程上调用ArkTS能力?
421浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙开发中如何实现跨包路由?
198浏览 • 1回复 待解决
可以通过转移方式跨线程传递PixelMap对象,因其本质上是NativeBinding对象。在子线程中创建PixelMap对象并将其传递给主线程,确保在调用
setTransferDetached(true)
以断开原线程对该对象的引用。typescript // Index.ets import { taskpool } from '@kit.ArkTS'; import { loadPixelMap } from './pixelMapTest'; import { BusinessError } from '@kit.BasicServicesKit';
@Entry @Component struct Index { @State message: string = 'Hello World'; @State pixelMap: PixelMap | undefined = undefined;
private loadImageFromThread(): void { const resourceMgr = getContext(this).resourceManager; resourceMgr.getRawFd('startIcon.png').then(rawFileDescriptor => { taskpool.execute(loadPixelMap, rawFileDescriptor).then(pixelMap => { if (pixelMap) { this.pixelMap = pixelMap as PixelMap; console.log('Succeeded in creating pixelMap.'); this.pixelMap.release(); } else { console.error('Failed to create pixelMap.'); } }).catch((e: BusinessError) => { console.error('taskpool execute loadPixelMap failed. Code: ' + e.code + ', message: ' + e.message); }); }); }
build() { RelativeContainer() { Text(this.message) .id('HelloWorld') .fontSize(50) .fontWeight(FontWeight.Bold) .alignRules({ center: { anchor: 'container', align: VerticalAlign.Center }, middle: { anchor: 'container', align: HorizontalAlign.Center } }) .onClick(() => { this.loadImageFromThread(); }) } .height('100%') .width('100%') } }
typescript // pixelMapTest.ets import { image } from '@kit.ImageKit';
@Concurrent export async function loadPixelMap(rawFileDescriptor: number): Promise<PixelMap> { const imageSource = image.createImageSource(rawFileDescriptor); const pixelMap = imageSource.createPixelMapSync(); imageSource.release(); pixelMap.setTransferDetached(true); return pixelMap; }