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(() => {