HarmonyOS 鸿蒙Next通过OffscreenCanvas绘制会崩溃但无任何崩溃日志
HarmonyOS 鸿蒙Next通过OffscreenCanvas绘制会崩溃但无任何崩溃日志
使用setInterval重新渲染就会崩溃
2 回复
可以使用这种写法
@Component
export struct CanvasOffScreen {
private intervalId: number = -1
private sum: number = 0
private startRender: boolean = false
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
createInterval() {
this.intervalId = setInterval(() => {
++this.sum
if (this.sum > 1000) {
console.log("clearInterval", new Date().getTime().toString())
clearInterval(this.intervalId)
this.sum = 0
this.createInterval()
return
}
if (this.startRender) {
console.log("render start", new Date().getTime().toString())
this.render()
}
}, 200)
}
render() {
let offCanvas: OffscreenCanvas = new OffscreenCanvas(300, 500)
let offContext = offCanvas.getContext("2d", this.settings)
// offContext.fillStyle = '#CDCDCD'
// offContext.fillRect(0, 0, 300, 500)
// offContext.fillStyle = '#000000'
// offContext.font = '70px serif bold'
// offContext.fillText("Offscreen : Hello World!", 20, 60)
offContext.beginPath()
offContext.arc(100, 100, 50, 0, 6.28)
offContext.stroke()
let image = offCanvas.transferToImageBitmap()
this.context.transferFromImageBitmap(image)
}
clearRender() {
console.log("clearRender", new Date().getTime().toString())
}
aboutToAppear(): void {
this.createInterval()
}
aboutToDisappear(): void {
clearInterval(this.intervalId)
}
build() {
Flex({ direction: FlexDirection.Column }) {
Canvas(this.context)
.width('100%')
.height('100%')
.backgroundColor($r('sys.color.comp_background_list_card'))
.onReady(() => {
this.startRender = true
this.render()
})
Button("clear").onClick((event: ClickEvent) => {
this.clearRender()
})
}
}
}
针对您提到的HarmonyOS鸿蒙Next系统在使用OffscreenCanvas绘制时出现崩溃但无任何崩溃日志的问题,这通常涉及到底层图形渲染、内存管理或系统资源分配等方面的复杂交互。以下是一些可能的分析方向:
-
资源限制:检查应用是否因资源请求超出系统限制(如内存、GPU资源)而导致崩溃。尽管没有崩溃日志,但系统日志中可能含有相关警告或错误信息。
-
API使用不当:确认OffscreenCanvas的使用是否符合API规范,包括正确的初始化、资源释放和线程同步。
-
系统Bug:考虑是否可能是鸿蒙系统的某个特定版本存在的已知或未知Bug。查看鸿蒙系统的更新日志和开发者论坛,看是否有类似问题的报告或解决方案。
-
环境差异:测试在不同设备或不同版本的鸿蒙系统上是否复现该问题,以排除特定环境因素的干扰。
由于问题复杂且缺乏具体日志,上述分析方向仅供参考。若问题依旧没法解决,请直接联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html