鸿蒙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,最新版又出现了。
更多关于鸿蒙uni-app小程序sdk关闭小程序时报错导致app崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更新到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的官方文档或联系技术支持获取更专业的帮助。