鸿蒙集成uni-app小程序返回时app崩溃

发布于 1周前 作者 songsunli 来自 Uni-App

鸿蒙集成uni-app小程序返回时app崩溃

测试过的手机:

  • 鸿蒙

示例代码:

import { openUniMP,isExistsUniMP, releaseWgtToRunPath } from '@dcloudio/uni-app-runtime';

@Entry
@Component
struct Index {
@State message: string = 'Hello World';

build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: 'container', align: VerticalAlign.Center },
middle: { anchor: 'container', align: HorizontalAlign.Center }
})
.onClick(async () =>{
const mpId = "UNI6275E02"

await new Promise<void>((resolve, reject) => {
try {
// 判断应用是否已释放到运行目录
let isExists = isExistsUniMP(mpId)
console.log("isExists:"+isExists)
// 拼接wgt包路径
let path = getContext().resourceDir + "/"+mpId+".wgt"
// 释放 wgt 包到运行目录
releaseWgtToRunPath(mpId,path, (code:number, data: object)=>{
console.log(JSON.stringify({code,data}))
resolve()
})
} catch(err){
reject(err)
}
})

// 启动小程序
const mp = openUniMP(mpId)
mp.on('close',()=>{
console.log('UniMP-close')
})
mp.on('show',()=>{
console.log('UniMP-show')
})
mp.on('hide',()=>{
console.log('UniMP-hide')
})
})
}
.height('100%')
.width('100%')
}
}

操作步骤:

  • 打开小程序,点击返回或者右滑屏幕返回,app直接崩溃报错

预期结果:

  • 希望可以正常返回

实际结果:

  • 崩溃无法开发

bug描述:

  • 鸿蒙集成uni小程序可以正常打开,但是右滑屏幕返回app直接崩溃,使用 <u-navbar title="营销分析"></u-navbar> 组件,点击返回按钮,也是app崩溃
  • DevEco-Studio 5.0.3.910版本

更多关于鸿蒙集成uni-app小程序返回时app崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

看到消息了,提供个复现工程吧,说着完整的页面代码,方便相关同事直接运行。

更多关于鸿蒙集成uni-app小程序返回时app崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对您提到的鸿蒙(HarmonyOS)集成uni-app小程序在返回时应用崩溃的问题,这通常涉及到多个层面的调试,包括前端代码、uni-app框架、鸿蒙系统的原生模块以及它们之间的交互。以下是一个可能的代码示例和调试思路,用于帮助您定位和解决问题。

1. 检查uni-app小程序的生命周期管理

首先,确保在uni-app中正确管理了页面的生命周期。特别是onHideonShowonUnload等方法,这些方法在鸿蒙应用切换到后台、返回前台或页面销毁时会被调用。

export default {
    onShow() {
        console.log('Page is shown');
        // 初始化数据或恢复状态
    },
    onHide() {
        console.log('Page is hidden');
        // 暂停某些操作,如定时器或网络请求
    },
    onUnload() {
        console.log('Page is unloaded');
        // 清理资源,如取消订阅或销毁对象
    }
}

2. 调试原生模块交互

如果小程序在返回时崩溃,可能与原生模块的交互有关。检查所有与原生代码交互的JSBridge调用,确保在页面生命周期结束时正确释放资源。

// 假设有一个原生模块调用
function callNativeModule() {
    uni.requireNativePlugin('YourPlugin').someFunction({
        success: function(res) {
            console.log('Native call success', res);
        },
        fail: function(err) {
            console.error('Native call failed', err);
        }
    });
}

// 在页面卸载时尝试取消或清理原生调用(如果可能)
export default {
    onUnload() {
        // 假设有一个取消方法
        uni.requireNativePlugin('YourPlugin').cancelPreviousCall();
    }
}

3. 鸿蒙系统日志分析

使用鸿蒙开发者工具查看系统日志,特别是崩溃时的堆栈跟踪,这可以帮助您定位是哪部分代码或模块导致了崩溃。

4. 更新和兼容性检查

确保您的uni-app框架、鸿蒙SDK以及所有依赖库都是最新版本,以利用最新的修复和性能改进。

5. 简化测试案例

如果问题依然难以定位,尝试创建一个最小化的测试案例,只包含导致崩溃的核心功能。这有助于快速识别问题所在。

通过上述步骤,您应该能够更接近问题的根源。如果问题依然存在,建议查阅uni-app和鸿蒙系统的官方文档,或在相关开发者社区寻求更具体的帮助。

回到顶部