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绘制会崩溃但无任何崩溃日志的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对您提到的HarmonyOS鸿蒙Next系统在使用OffscreenCanvas绘制时出现崩溃但无任何崩溃日志的问题,这通常涉及到底层图形渲染、内存管理或系统资源分配等方面的复杂交互。以下是一些可能的分析方向:
- 
资源限制:检查应用是否因资源请求超出系统限制(如内存、GPU资源)而导致崩溃。尽管没有崩溃日志,但系统日志中可能含有相关警告或错误信息。
 - 
API使用不当:确认OffscreenCanvas的使用是否符合API规范,包括正确的初始化、资源释放和线程同步。
 - 
系统Bug:考虑是否可能是鸿蒙系统的某个特定版本存在的已知或未知Bug。查看鸿蒙系统的更新日志和开发者论坛,看是否有类似问题的报告或解决方案。
 - 
环境差异:测试在不同设备或不同版本的鸿蒙系统上是否复现该问题,以排除特定环境因素的干扰。
 
由于问题复杂且缺乏具体日志,上述分析方向仅供参考。若问题依旧没法解决,请直接联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html
        
      
                  
                  
                  
