uni-app IOS端偶现 reLaunch locked 导致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 |
用延迟就没有问题 如果不延迟就会这样
在 Uni-app 开发中,reLaunch
是一个用于关闭所有页面并重新打开指定页面的 API。如果在 iOS 端偶现 reLaunch locked
导致 APP 一直在屏闪,可能是由于某些原因导致 reLaunch
被频繁调用或陷入死循环。以下是一些可能的原因和解决方案:
可能的原因
-
频繁调用
reLaunch
可能在某些逻辑中频繁调用了reLaunch
,导致页面不断重新加载,进而出现屏闪。 -
页面跳转逻辑问题
页面跳转逻辑可能存在死循环,例如在某个页面触发reLaunch
,而目标页面又可能再次触发reLaunch
。 -
异步操作未完成
在异步操作(如网络请求)未完成时调用了reLaunch
,导致状态不一致或重复触发。 -
iOS 系统或 Uni-app 框架的兼容性问题
可能是 Uni-app 框架或 iOS 系统在某些特定场景下的兼容性问题。
解决方案
-
检查
reLaunch
调用逻辑
确保reLaunch
只在必要的情况下调用,并避免在短时间内频繁调用。可以通过日志或调试工具检查调用频率。uni.reLaunch({ url: '/pages/index/index' });
-
避免跳转死循环
检查页面跳转逻辑,确保不会出现 A 页面跳转到 B 页面,而 B 页面又跳回 A 页面的情况。 -
确保异步操作完成后再调用
reLaunch
如果有异步操作(如网络请求),确保在操作完成后再调用reLaunch
。uni.request({ url: 'https://example.com/api', success: (res) => { uni.reLaunch({ url: '/pages/index/index' }); } });
-
使用
uni.navigateTo
或uni.redirectTo
替代reLaunch
如果不需要关闭所有页面,可以尝试使用uni.navigateTo
或uni.redirectTo
替代reLaunch
。uni.navigateTo({ url: '/pages/index/index' });
-
捕获异常并处理
在调用reLaunch
时,捕获可能的异常并进行处理。try { uni.reLaunch({ url: '/pages/index/index' }); } catch (error) { console.error('reLaunch failed:', error); }