HarmonyOS 鸿蒙Next通过OffscreenCanvas绘制会崩溃但无任何崩溃日志

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

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绘制时出现崩溃但无任何崩溃日志的问题,这通常涉及到底层图形渲染、内存管理或系统资源分配等方面的复杂交互。以下是一些可能的分析方向:

  1. 资源限制:检查应用是否因资源请求超出系统限制(如内存、GPU资源)而导致崩溃。尽管没有崩溃日志,但系统日志中可能含有相关警告或错误信息。

  2. API使用不当:确认OffscreenCanvas的使用是否符合API规范,包括正确的初始化、资源释放和线程同步。

  3. 系统Bug:考虑是否可能是鸿蒙系统的某个特定版本存在的已知或未知Bug。查看鸿蒙系统的更新日志和开发者论坛,看是否有类似问题的报告或解决方案。

  4. 环境差异:测试在不同设备或不同版本的鸿蒙系统上是否复现该问题,以排除特定环境因素的干扰。

由于问题复杂且缺乏具体日志,上述分析方向仅供参考。若问题依旧没法解决,请直接联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部