uni-app IOS端偶现 reLaunch locked 导致APP一直在屏闪

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

uni-app IOS端偶现 reLaunch locked 导致APP一直在屏闪

操作步骤:

  • uni.reLaunch({ url: “/pages/index” })

预期结果:

  • 正常页面跳转

实际结果:

  • reLaunch locked 导致APP一直在屏闪

bug描述:

长时间不用,打开APP后,

{
"errMsg": "reLaunch:fail /pages/index/index locked"
}

导致APP一直在屏闪

信息类别 内容
产品分类 uniapp/App
PC开发环境 Windows
PC系统版本 win10
HBuilderX 正式
HBuilderX版本 3.96
手机系统 iOS
手机版本 iOS 16
手机厂商 苹果
手机型号 iphone8
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

2 回复

用延迟就没有问题 如果不延迟就会这样


在 Uni-app 开发中,reLaunch 是一个用于关闭所有页面并重新打开指定页面的 API。如果在 iOS 端偶现 reLaunch locked 导致 APP 一直在屏闪,可能是由于某些原因导致 reLaunch 被频繁调用或陷入死循环。以下是一些可能的原因和解决方案:


可能的原因

  1. 频繁调用 reLaunch
    可能在某些逻辑中频繁调用了 reLaunch,导致页面不断重新加载,进而出现屏闪。

  2. 页面跳转逻辑问题
    页面跳转逻辑可能存在死循环,例如在某个页面触发 reLaunch,而目标页面又可能再次触发 reLaunch

  3. 异步操作未完成
    在异步操作(如网络请求)未完成时调用了 reLaunch,导致状态不一致或重复触发。

  4. iOS 系统或 Uni-app 框架的兼容性问题
    可能是 Uni-app 框架或 iOS 系统在某些特定场景下的兼容性问题。


解决方案

  1. 检查 reLaunch 调用逻辑
    确保 reLaunch 只在必要的情况下调用,并避免在短时间内频繁调用。可以通过日志或调试工具检查调用频率。

    uni.reLaunch({
        url: '/pages/index/index'
    });
  2. 避免跳转死循环
    检查页面跳转逻辑,确保不会出现 A 页面跳转到 B 页面,而 B 页面又跳回 A 页面的情况。

  3. 确保异步操作完成后再调用 reLaunch
    如果有异步操作(如网络请求),确保在操作完成后再调用 reLaunch

    uni.request({
        url: 'https://example.com/api',
        success: (res) => {
            uni.reLaunch({
                url: '/pages/index/index'
            });
        }
    });
  4. 使用 uni.navigateTouni.redirectTo 替代 reLaunch
    如果不需要关闭所有页面,可以尝试使用 uni.navigateTouni.redirectTo 替代 reLaunch

    uni.navigateTo({
        url: '/pages/index/index'
    });
  5. 捕获异常并处理
    在调用 reLaunch 时,捕获可能的异常并进行处理。

    try {
        uni.reLaunch({
            url: '/pages/index/index'
        });
    } catch (error) {
        console.error('reLaunch failed:', error);
    }
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!