uni-app 小程序概率性出现闪退

uni-app 小程序概率性出现闪退

操作步骤:

  • 没有稳定的复现方法,都是概率性复现。

预期结果:

  • 小程序不会出现闪退,app也不会闪退,小程序控制区域和路由跳转方法正常

实际结果:

bug描述:

  • 【备注】安卓系统版本是鸿蒙系统 2.0.0,上面的选项没有。
  • 【问题背景】
    • app内嵌sdk版本:3.2.9、3.2.16,两个版本都试过
    • 小程序编译版本:3.2.9、3.2.16,两个版本都试过
  • 【问题描述】

    问题1:进入小程序后会偶然复现小程序路由跳转的方法全都失效了

    • 发现日志报错:
      [ERROR]Uncaught ReferenceError: plus is not defined at __uniappview.html:1。
      

    问题2:偶然出现app页面只有一部分是小程序控制的,有一部分是显示灰色背景,

    • 已经禁止了横竖屏切换。所以不可能是这个导致的。
    • 而且这个背景和键盘弹起时出现的背景一模一样,猜测是键盘收起时,没有重置小程序的控制区域导致的。

    问题3:进入小程序后偶然出现小程序空白页然后小程序立即闪退的问题

    问题4:plus.runtime.quit()退出时会概率性导致APP闪退

    • 使用plus.runtime.quit()退出时会概率性导致APP闪退,然后再次打开app进入小程序时会出现打开小程序页面后,会立即关闭小程序回到app的现象
    • 发现错误日志:
      [ERROR]Error: [JS Framework] Failed to receiveTasks, instance (33) is not available.
      

Image


更多关于uni-app 小程序概率性出现闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

14 回复

能提供一下可以复现问题的代码吗或者是更详细的 闪退日志

更多关于uni-app 小程序概率性出现闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


复现问题的代码这个提供不了。 闪退日志,我可以上传一个附件,附件太大了,上传不了

闪退日志1

崩溃日志2

老哥。。。12W行的日志啊。。。

闪退的问题我们项目中也遇到过,希望尽快解决

plus.runtime.quit()偶现闪退我们app也遇到过了,这偶尔来一发,稳定性太差了啊,太揪心了,就不能兜底下码?

一个问题一个问题说。 我先看一下 plus.runtime.quit() 这个问题。

plus.runtime.quit() 偶现崩溃的问题。我这边尽量测试没有复现。 能否提供一下 可以复现问题的示例或者有效的报错日志呢

plus.runtime.quit() 偶现崩溃的问题。我这边尽量测试没有复现。 能否提供一下 可以复现问题的示例或者有效的报错日志呢

这个都不是必现的,我也很难提供这个环境,报错日志主要是在111132行左右奔溃的,你看看是否有用

问题3才是我们最紧急的,可以优先看

问题2今天又复现了一次

针对你描述的uni-app小程序在鸿蒙系统上概率性闪退问题,结合错误日志分析,主要原因是Webview实例异常plus API调用时机不当。以下是具体问题分析和解决方案:

问题1:路由跳转失效(plus未定义)

  • 原因plus对象在Webview未完全初始化时就被调用,常见于页面过早执行plus相关代码。
  • 解决
    1. 确保所有plus API调用放在uni.onLaunchuni.onShow或页面onLoad生命周期内。
    2. 使用条件判断保护调用:
    if (typeof plus !== 'undefined') {
      // 调用plus API
    }
    

问题2:页面区域异常(灰色背景)

  • 原因:键盘弹起/收起时,Webview布局未正确重置,可能与鸿蒙系统兼容性有关。
  • 解决
    1. 监听键盘事件,手动重置Webview位置:
    uni.onKeyboardHeightChange(res => {
      // 键盘高度变化时调整布局
    })
    
    1. 检查CSS布局,避免使用fixed定位导致区域错乱。

问题3:空白页闪退

  • 原因:Webview实例创建失败或内存不足,鸿蒙系统对Webview管理较严格。
  • 解决
    1. 减少小程序初始加载资源,延迟非必要模块加载。
    2. pages.json中配置全局"lazyCodeLoading": "requiredComponents"启用懒加载。

问题4:plus.runtime.quit()导致闪退

  • 原因:直接调用quit()会强制销毁Webview实例,但实例可能被其他模块引用,导致后续打开时实例不可用(instance is not available)。
  • 解决
    1. 避免直接调用plus.runtime.quit(),改用小程序生命周期管理:
    // 关闭小程序但不退出Webview
    uni.navigateBack({ delta: 10 }) // 返回上级页面
    // 或使用SDK关闭方法(如适用)
    
    1. 如需完全退出,改为调用uni.exitMiniProgram()(需平台支持)。

通用建议:

  • 更新基础库:确保使用最新版uni-app SDK(3.2.16+)并测试鸿蒙系统兼容性。
  • 错误捕获:全局监听错误,避免崩溃:
    uni.onError(error => {
      console.error('全局错误:', error)
    })
回到顶部