uni-app onHide回调函数中使用路由跳转,再次打开app时使用switchTab会导致App闪退
uni-app onHide回调函数中使用路由跳转,再次打开app时使用switchTab会导致App闪退
| 项目属性 | 值 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | 11 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.99 |
| 手机系统 | Android |
| 手机系统版本号 | Android 13 |
| 手机厂商 | 小米 |
| 手机机型 | 13 |
| 页面类型 | nvue |
| vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
操作步骤:
- 首页打开C页面
- 回到手机桌面,App置于后台
- 回到App点击页面Tabbar按钮
预期结果:
能正常回到tabbar的页面
实际结果:
出现App闪退
bug描述:
App生命周期onHide回函数中使用navigateTo进行路由跳转,再次打开app时,在跳转的页面使用switchTab会导致App闪退
这个BUG,在我的操作流程中百分之百能复现,
下面是上传的代码,拿我的代码能复现
更多关于uni-app onHide回调函数中使用路由跳转,再次打开app时使用switchTab会导致App闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以给onHide 跳转加上 animationType:‘none’
onHide: function() {
uni.navigateTo({
url:"/pages/D/D",
animationType:‘none’
})
}
更多关于uni-app onHide回调函数中使用路由跳转,再次打开app时使用switchTab会导致App闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
有用
在 uni-app 中,onHide 生命周期回调函数会在应用进入后台时触发。如果你在 onHide 中使用路由跳转(如 uni.switchTab),可能会导致应用再次打开时出现闪退的情况。
问题分析
onHide中的路由跳转:当应用进入后台时,执行uni.switchTab或其他路由跳转操作可能会导致页面状态不一致或路由栈混乱。- 再次打开应用时的闪退:由于路由栈可能已经被破坏或不一致,应用在再次打开时无法正确初始化页面,导致闪退。
解决方案
-
避免在
onHide中进行路由跳转:onHide主要用于处理应用进入后台时的逻辑,不建议在这里进行路由跳转操作。你可以将路由跳转的逻辑移到其他生命周期函数中,如onShow或onLaunch。 -
使用
onShow生命周期:如果你需要在应用从后台回到前台时执行某些操作(如跳转到某个页面),可以在onShow生命周期中进行处理。
export default {
onShow() {
// 应用从后台回到前台时执行的操作
uni.switchTab({
url: '/pages/home/home'
});
},
onHide() {
// 应用进入后台时执行的操作
// 不要在这里进行路由跳转
}
};
-
检查路由栈的状态:如果你确实需要在
onHide中执行某些操作,确保这些操作不会破坏路由栈的状态。你可以通过调试工具检查路由栈的状态,确保应用再次打开时能够正确初始化。 -
处理异常情况:在路由跳转时,添加异常处理逻辑,捕获可能的错误并进行处理。
uni.switchTab({
url: '/pages/home/home',
success: () => {
console.log('跳转成功');
},
fail: (err) => {
console.error('跳转失败', err);
}
});

