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

操作步骤:

  1. 首页打开C页面
  2. 回到手机桌面,App置于后台
  3. 回到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

3 回复

可以给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),可能会导致应用再次打开时出现闪退的情况。

问题分析

  1. onHide 中的路由跳转:当应用进入后台时,执行 uni.switchTab 或其他路由跳转操作可能会导致页面状态不一致或路由栈混乱。
  2. 再次打开应用时的闪退:由于路由栈可能已经被破坏或不一致,应用在再次打开时无法正确初始化页面,导致闪退。

解决方案

  1. 避免在 onHide 中进行路由跳转onHide 主要用于处理应用进入后台时的逻辑,不建议在这里进行路由跳转操作。你可以将路由跳转的逻辑移到其他生命周期函数中,如 onShowonLaunch

  2. 使用 onShow 生命周期:如果你需要在应用从后台回到前台时执行某些操作(如跳转到某个页面),可以在 onShow 生命周期中进行处理。

export default {
  onShow() {
    // 应用从后台回到前台时执行的操作
    uni.switchTab({
      url: '/pages/home/home'
    });
  },
  onHide() {
    // 应用进入后台时执行的操作
    // 不要在这里进行路由跳转
  }
};
  1. 检查路由栈的状态:如果你确实需要在 onHide 中执行某些操作,确保这些操作不会破坏路由栈的状态。你可以通过调试工具检查路由栈的状态,确保应用再次打开时能够正确初始化。

  2. 处理异常情况:在路由跳转时,添加异常处理逻辑,捕获可能的错误并进行处理。

uni.switchTab({
  url: '/pages/home/home',
  success: () => {
    console.log('跳转成功');
  },
  fail: (err) => {
    console.error('跳转失败', err);
  }
});
回到顶部