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

【报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

要回复问题请先登录注册

  • 标题 / 粗斜体
  • 代码片段
  • 超链接 / 图片 / 视频
  • 列表 / 引用

文章内容较多时,可以用标题分段 :

## 大标题 
### 小标题

斜体 / 粗体 :

**粗体** 
*斜体*
***粗斜体***

代码片段 :

``` javascript
代码片段
```

超链接 :

[链接文字](链接地址) 例: [百度](http://www.baidu.com)

图片 :

![图片说明](图片地址) 例: ![百度logo](http://www.baidu.com/img/bdlogo.gif)

视频 :

!![视频说明](视频地址) 例: !![优酷视频](http://youku.com)

有序列表 :

1. 123
2. 123
3. 123

无序列表 :

- 123
- 123
- 123

引用 : ( 双回车后结束引用 )

> 引用内容
引用内容
引用内容