HarmonyOS 鸿蒙Next 关于crash问题的咨询

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 关于crash问题的咨询 我在开发过程中遇到了这样一个crash

首先我有一个通用导航栏组件TitleBar,rightAreaBuilder用于表示该组件右侧区域的内容。

/**
 * TitleBar.ets
 */
export struct TitleBar {
  // right ui
  @BuilderParam rightAreaBuilder?: () => void
  // 后面略
}

我在业务页面中用到了这个组件,并设置了该icon的点击事件。

/**
 * SomePage.ets
 */
export struct SomePage {
  build() {
    Column() {
      TitleBar({
        rightAreaBuilder: this.rightIcon,
      })
    }
  }

  @Builder
  rightIcon() {
    Image($r('app.media.nav_refresh'))
      .width($r('app.float.size_45'))
      .height($r('app.float.size_45'))
      .padding($r('app.float.size_10'))
      .onClick(() => {
        this.refreshAction()
      })
  }

  private refreshAction() {
    // 刷新功能函数
  }
}

然而,当我点击该按钮时,APP崩溃,报错如下

Error message:is not callable

SourceCode:
this.refreshAction();

应该是onClick中this找不到导致的崩溃。

请问我应该如何解决这样的问题?


更多关于HarmonyOS 鸿蒙Next 关于crash问题的咨询的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

参考demo:

import promptAction from '@ohos.promptAction'
import { Child } from '../Component/test'

@Entry
@Component
struct SomePage {
  build() {
    Column() {
      Row(){
      }.backgroundColor(Color.Red).width('100%').height(300)
      Child({ customBuilderParam: rightIcon })
    }
  }
}

@Builder
function rightIcon() {
  Image($r('app.media.startIcon'))
    .width(45)
    .height(45)
    .padding(10)
    .onClick(() => {
      refreshAction()
    })
}

function refreshAction() {
  promptAction.showToast({
    message:'dialog '
  })
}

@Component
export struct Child {
  
  @Builder customBuilder() {}
  @BuilderParam customBuilderParam: () => void = this.customBuilder;
  build() {
    Column() {
      this.customBuilderParam()
    }
  }
}
@Component
export struct Child {
  
  @Prop num:number
  @Prop customBuilderParam: WrappedBuilder<[number,()=>"void">] ;
  build() {
    Column() {
      this.customBuilderParam.builder(this.num,()=>{
        this.num++
        console.log(`${this.num}`)
      })
    }
  }
}

import { Child } from '../Component/test'
let globalBuilder: WrappedBuilder<[number,()=>"void">]> = wrapBuilder(rightIcon);

@Entry
@Component
struct SomePage {

  @State num:number = 0
  build() {
    Column() {
      Row(){
        Text(`${this.num}`)
      }.backgroundColor(Color.Red).width('100%').height(300)
      Child({ customBuilderParam:globalBuilder,num:this.num })
    }
  }
}

@Builder
export function rightIcon( num:number,refreshAction:(num:number)=>"void" ) {
  Image($r('app.media.startIcon'))
    .width(45)
    .height(45)
    .padding(10)
    .onClick(() => {
      refreshAction(num)
    })
}

更多关于HarmonyOS 鸿蒙Next 关于crash问题的咨询的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对“HarmonyOS 鸿蒙Next 关于crash问题的咨询”,以下是专业且简洁的回答:

HarmonyOS 鸿蒙Next系统中的crash问题通常涉及系统稳定性与应用程序异常。这类问题可能由多种因素引起,包括但不限于:

  1. 内存管理不当:应用程序在内存分配与释放过程中可能存在漏洞,导致访问无效内存区域而崩溃。

  2. 资源竞争与死锁:多线程环境下,不当的同步机制可能引发资源竞争或死锁,导致系统或应用崩溃。

  3. 系统服务异常:系统级服务或组件出现不可恢复的错误,可能引发整个系统的崩溃。

  4. 第三方库或组件缺陷:集成的第三方库或组件可能存在未修复的bug,导致应用或系统崩溃。

  5. 硬件兼容性问题:特定硬件设备或驱动与鸿蒙系统的兼容性问题,也可能导致系统崩溃。

解决HarmonyOS 鸿蒙Next的crash问题,通常需要详细的崩溃日志和系统诊断信息。开发者应利用鸿蒙系统提供的调试工具,如Logcat、Trace32等,获取并分析崩溃现场的详细信息,从而定位并修复问题根源。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!