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的原生导航栏返回 应用闪退

QQ视频20240201202249.rar


更多关于uni-app plus.screen.lockOrientation onload切换横屏导致应用崩溃闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

部分荣耀手机有问题 其他型号手机暂无发现此问题

更多关于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-appplus.screen.lockOrientation 方法时,如果在 onload 或其他生命周期钩子中直接切换屏幕方向,可能会导致应用崩溃或闪退。这通常是因为在应用加载的早期阶段,某些必要的系统资源或组件尚未完全初始化,直接调用 lockOrientation 可能会导致不可预见的错误。

解决方案

  1. 延迟调用:确保在应用完全加载后再进行屏幕方向的切换。可以使用 setTimeout 来延迟调用 lockOrientation 方法。

    onLoad() {
      setTimeout(() => {
        plus.screen.lockOrientation('landscape-primary');
      }, 1000); // 延迟1秒
    }
    
  2. 使用 onReady 钩子onReady 生命周期钩子在页面初次渲染完成时触发,此时页面已经完全加载,可以安全地调用 lockOrientation

    onReady() {
      plus.screen.lockOrientation('landscape-primary');
    }
    
  3. 检查设备支持:在调用 lockOrientation 之前,检查设备是否支持屏幕方向锁定。

    onReady() {
      if (plus.screen && plus.screen.lockOrientation) {
        plus.screen.lockOrientation('landscape-primary');
      } else {
        console.error('当前设备不支持屏幕方向锁定');
      }
    }
    
  4. 捕获异常:在调用 lockOrientation 时,使用 try-catch 捕获可能的异常,避免应用崩溃。

    onReady() {
      try {
        plus.screen.lockOrientation('landscape-primary');
      } catch (error) {
        console.error('切换屏幕方向失败:', error);
      }
    }
    
  5. 使用 uni-apppageOrientation 配置:如果你只是想设置页面的默认方向,可以在 pages.json 中配置 pageOrientation

    {
      "pages": [
        {
          "path": "pages/index/index",
          "style": {
            "pageOrientation": "landscape"
          }
        }
      ]
    }
回到顶部