From 90077a4b6e6af7b7b99e772ee20d7b62c843d616 Mon Sep 17 00:00:00 2001 From: lanterngamescn Date: Sat, 27 Jun 2026 14:29:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(share):=20onShare=20=E5=8A=A0=20isActive=20?= =?UTF-8?q?=E5=AE=88=E5=8D=AB=20+=20PixelMap=20=E5=BB=B6=E5=88=B0=20setDat?= =?UTF-8?q?a=20=E5=AE=8C=E6=88=90=E5=90=8E=E9=87=8A=E6=94=BE=EF=BC=88final?= =?UTF-8?q?=20review=20C1/M1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../src/main/ets/providers/ShareProvider.ets | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/feature_capabilities/src/main/ets/providers/ShareProvider.ets b/feature_capabilities/src/main/ets/providers/ShareProvider.ets index de0e4c9..f810195 100644 --- a/feature_capabilities/src/main/ets/providers/ShareProvider.ets +++ b/feature_capabilities/src/main/ets/providers/ShareProvider.ets @@ -73,7 +73,8 @@ export class ShareProvider implements CapabilityProvider { // —— 入站 —— private onShare(data: string): void { - if (this.ctx === undefined) { + const bridge = this.bridge; + if (this.ctx === undefined || bridge === undefined || !bridge.isActive()) { return; } let bean: SharetypeBean; @@ -294,15 +295,18 @@ export class ShareProvider implements CapabilityProvider { private writeClipboardImage(filePath: string): void { const source: image.ImageSource = image.createImageSource(filePath); source.createPixelMap().then((pm: image.PixelMap) => { + let data: pasteboard.PasteData; try { - const data: pasteboard.PasteData = pasteboard.createData(pasteboard.MIMETYPE_PIXELMAP, pm); - pasteboard.getSystemPasteboard().setData(data) - .catch((e: BusinessError) => this.log.w(`clipboard image failed: ${e.code} ${e.message}`)); + data = pasteboard.createData(pasteboard.MIMETYPE_PIXELMAP, pm); } catch (e) { this.log.w(`clipboard image init failed: ${(e as Error).message}`); - } finally { pm.release(); + return; } + // pm 须存活到 setData 完成(createData 可能持引用),故在 setData settle 后再 release。 + pasteboard.getSystemPasteboard().setData(data) + .catch((e: BusinessError) => this.log.w(`clipboard image failed: ${e.code} ${e.message}`)) + .finally(() => pm.release()); }).catch((e: BusinessError) => { this.log.w(`createPixelMap failed: ${e.code} ${e.message}`); }).finally(() => {