uni-app plus.screen.lockOrientation onload切换横屏导致应用崩溃闪退
uni-app plus.screen.lockOrientation onload切换横屏导致应用崩溃闪退
测试过的手机
HONOR 20i harmonyOs 3.0
操作步骤
页面栈: tabbar -> page1 -> page2
项目: hb方式创建 vue3
page2 onLoad执行plus.screen.lockOrientation(“landscape-primary”) onBeforeUnmount执行plus.screen.lockOrientation(“portrait-primary”) 点击page2原生导航栏回到page1 再点击page1的原生导航栏返回 应用闪退
预期结果
不闪退
实际结果
闪退
bug描述
使用plus.screen.lockOrientation onload切换横屏 onunload返回竖屏 点击原生导航栏返回箭头 hb原生基座闪退以及正式包也闪退
页面栈: tabbar -> page1 -> page2
项目: hb方式创建 vue3
page2 onLoad执行plus.screen.lockOrientation(“landscape-primary”) onBeforeUnmount执行plus.screen.lockOrientation(“portrait-primary”) 点击page2原生导航栏回到page1 再点击page1的原生导航栏返回 应用闪退
更多关于uni-app plus.screen.lockOrientation onload切换横屏导致应用崩溃闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
部分荣耀手机有问题 其他型号手机暂无发现此问题
更多关于uni-app plus.screen.lockOrientation onload切换横屏导致应用崩溃闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
荣耀50 MagicOS 7.0 安卓11也这样 哥们怀疑荣耀的问题很大
可以在 onBackPress 中监听,等设置横屏之后,定时器再返回,有的手机反应慢点是会卡
data() {
return {
isLandscape:true//是横屏
};
},
onBackPress(){
if(this.isLandscape){
//返回设置竖屏
setTimeout(()=>{
this.isLandscape = false
uni.navigateBack({
delta:1
})
},600)
return true;
}
},
哥们解决了吗,我遇到和你一样的问题,安卓手机没事就华为的出现闪退
妈的没解决 手动写的横屏样式
在使用 uni-app 的 plus.screen.lockOrientation 方法时,如果在 onload 或其他生命周期钩子中直接切换屏幕方向,可能会导致应用崩溃或闪退。这通常是因为在应用加载的早期阶段,某些必要的系统资源或组件尚未完全初始化,直接调用 lockOrientation 可能会导致不可预见的错误。
解决方案
-
延迟调用:确保在应用完全加载后再进行屏幕方向的切换。可以使用
setTimeout来延迟调用lockOrientation方法。onLoad() { setTimeout(() => { plus.screen.lockOrientation('landscape-primary'); }, 1000); // 延迟1秒 } -
使用
onReady钩子:onReady生命周期钩子在页面初次渲染完成时触发,此时页面已经完全加载,可以安全地调用lockOrientation。onReady() { plus.screen.lockOrientation('landscape-primary'); } -
检查设备支持:在调用
lockOrientation之前,检查设备是否支持屏幕方向锁定。onReady() { if (plus.screen && plus.screen.lockOrientation) { plus.screen.lockOrientation('landscape-primary'); } else { console.error('当前设备不支持屏幕方向锁定'); } } -
捕获异常:在调用
lockOrientation时,使用try-catch捕获可能的异常,避免应用崩溃。onReady() { try { plus.screen.lockOrientation('landscape-primary'); } catch (error) { console.error('切换屏幕方向失败:', error); } } -
使用
uni-app的pageOrientation配置:如果你只是想设置页面的默认方向,可以在pages.json中配置pageOrientation。{ "pages": [ { "path": "pages/index/index", "style": { "pageOrientation": "landscape" } } ] }

