dukai
dukai
  • 发布:2023-07-21 10:43
  • 更新:2023-07-21 10:57
  • 阅读:273

【报Bug】uni.getLocation在安卓设备上会触发onShow生命周期,导致页面不断执行onShow内的方法

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: macOS Monterey 12.6.7

HBuilderX类型: 正式

HBuilderX版本号: 3.8.7

手机系统: Android

手机系统版本号: Android 13

手机厂商: 华为

手机机型: 红米K50

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
onShow(() => {   
  initPageData();  
});

// 在initPageData中使用了 uni.getLocation

  const handleGetPosition = () =>  
    new Promise((resolve, reject) => {  
      uni.getLocation({  
        type: 'wgs84',  
        success(res: { longitude: number; latitude: number }) {  
          resolve(res);  
          console.log('>>>>>>print me 获取地理位置  >>>>success<<<<', res);  
        },  
        fail: (err) => {  
          reject(err);  
        },  
      });  
    });  

const initPageData = async ()=>{  
    const res = await handleGetPosition();  
    console.log(res);  
}

操作步骤:
  1. 新建一个index.vue页面,
  2. 页面使用onShow方法;
  3. onShow中执行 uni.getLocation方法,并打印 ‘执行onShow’

预期结果:

打印内容‘执行onShow’只会执行一次

实际结果:

不断执行onShow内的回调函数

bug描述:

index.vue中使用了 onShow方法,用于每次进入页面进行数据请求

onShow(() => {   
  initPageData();  
});

在initPageData中使用了 uni.getLocation

  const handleGetPosition = () =>  
    new Promise((resolve, reject) => {  
      uni.getLocation({  
        type: 'wgs84',  
        success(res: { longitude: number; latitude: number }) {  
          resolve(res);  
          console.log('>>>>>>print me 获取地理位置  >>>>success<<<<', res);  
        },  
        fail: (err) => {  
          reject(err);  
        },  
      });  
    });  

const initPageData = async ()=>{  
    const res = await handleGetPosition();  
    console.log(res);  
}

然后在页面中打开之后就会不停地执行 onShow,这个问题仅仅在Andriod出现了,在IOS上是没有的,也是昨晚上,我们自己的应用打线上包的时候,上线时候才发现的,之前打包安卓是没有这个问题的;

另外想要强调一点就是,使用 HbuilderX 制作最新的真机调试基座,就能够复现这个问题,也是在Andriod上有,IOS没得

希望官方大大能够关注下这个问题,帮忙排查下原因,谢谢了。

2023-07-21 10:43 负责人:无 分享
已邀请:
DCloud_UNI_Anne

DCloud_UNI_Anne

要回复问题请先登录注册