鸿蒙uni-app小程序sdk关闭小程序时报错导致app崩溃

鸿蒙uni-app小程序sdk关闭小程序时报错导致app崩溃

产品分类:uni小程序SDK
手机系统:全部
页面类型:vue
SDK版本号:2.3.2

测试过的手机:

鸿蒙next

示例代码:

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 = "UNI77E0B0B"

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, { redirectPath: "pages/index/index?a=1212" })

mp.on('uniMPEvent', (event: string, data: object, notify) => {  
console.log(`----宿主收到小程序消息,事件:${event},消息:${JSON.stringify(data)}`);  
notify('宿主成功接收小程序消息')  
mp.on('close', () => {  
console.log('----------UniMP-close')  
})  
mp.close()  

})  
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%')
}

操作步骤:

鸿蒙系统的uni小程序sdk,最新版的依赖2.3.2,右滑关闭,主动调用关闭小程序包会报错

预期结果:

返回app原页面

实际结果:

app报错崩溃

bug描述:

鸿蒙系统的uni小程序sdk,最新版的依赖2.3.2,右滑关闭,主动调用关闭小程序包会报错,导致app崩溃。依赖更新日志上2.2.0这个版本可以,为什么已修复的bug,最新版又出现了。

Image 1 Image 2 Image 3

HiLog-2MM0223907012715-All_logs_of_selected_app-[30735]com.example_.myapplication-DEBUG-1729127810657_.txt


更多关于鸿蒙uni-app小程序sdk关闭小程序时报错导致app崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

更新到uni-app-runtime@2.3.7看看是不是还会崩溃

更多关于鸿蒙uni-app小程序sdk关闭小程序时报错导致app崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


新版本的目前不会了

针对鸿蒙uni-app小程序SDK在关闭小程序时出现的报错导致APP崩溃的问题,这通常涉及到SDK的生命周期管理或内存释放处理不当。以下是一个简化的代码示例和可能的解决方案,旨在帮助你定位和修复问题。请注意,由于具体环境和错误信息未给出,这里的代码仅供参考,你可能需要根据实际情况进行调整。

1. 检查小程序关闭逻辑

首先,确保你在关闭小程序时正确调用了SDK提供的关闭接口,并且处理了所有必要的清理工作。以下是一个基本的关闭小程序示例:

// 假设有一个uniAppClose函数是SDK提供的关闭小程序接口
function closeUniApp() {
    try {
        // 调用SDK关闭接口
        uniAppSDK.closeApp();

        // 清理资源,比如定时器、网络请求等
        clearAllTimers();
        cancelAllNetworkRequests();
        
        console.log('小程序已正常关闭');
    } catch (error) {
        // 捕获并处理错误,防止APP崩溃
        console.error('关闭小程序时发生错误:', error);
        // 可以添加更多的错误处理逻辑,比如上报错误、记录日志等
    }
}

// 清理定时器的函数示例
function clearAllTimers() {
    // 遍历并清除所有定时器
    for (let id of timerIds) {
        clearTimeout(id);
        clearInterval(id);
    }
    timerIds = []; // 清空定时器ID数组
}

// 取消所有网络请求的示例(伪代码)
function cancelAllNetworkRequests() {
    // 遍历并取消所有网络请求
    networkRequests.forEach(request => request.abort());
    networkRequests = []; // 清空请求数组
}

2. 检查内存泄漏

内存泄漏也是导致APP崩溃的常见原因之一。确保在关闭小程序时,所有动态分配的内存和资源都得到了正确释放。

3. 使用try-catch捕获异常

如上面的示例所示,使用try-catch语句块来捕获和处理可能的异常,可以有效防止程序因未处理的异常而崩溃。

4. 更新SDK和依赖

确保你使用的鸿蒙uni-app小程序SDK是最新版本,并且所有依赖库也都是最新的。有时候,问题可能由SDK或依赖库的已知bug引起,而这些bug在新版本中可能已经被修复。

5. 调试和日志

增加详细的日志记录,帮助定位问题发生的具体位置。使用鸿蒙提供的调试工具进行深入的调试分析。

通过上述步骤,你应该能够定位并解决关闭小程序时导致的APP崩溃问题。如果问题依旧存在,建议查阅SDK的官方文档或联系技术支持获取更专业的帮助。

回到顶部