详细问题描述
(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)
[内容]
HBuilderX,mac 版本号:2.4.6.20191210
程序主要用于安卓APP开发
在页面中使用循环定时器调用获取定位的uni.getlocation,程序会因为内存占用越来越大而崩溃。
定时器循环间隔10s,程序大概2个小时左右崩溃,
在开发过程中,为了快速重现问题,我们把循环时间间隔设置为0.1s,十分钟不到APP占用内存就从100M升到了500M,就崩了。
重现步骤
[步骤]
1、新建一个最简单的uniapp项目
2、在app.vue或者index.vue的onluanch()里调用循环获取定位的函数
3、设置循环间隔为100ms
4、开启真机调试并运行
[结果]
app在手机中占用内存越来越大,然后就崩了
[期望]
自动回收或者释放资源
uni-app运行环境说明
[运行端是h5或app或某个小程序?]
安卓app
[运行端版本号]
测试过华为、魅族、三星,都会崩,只是根据手机的性能不同,崩溃的时间不同
附件
[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]
[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]
[App安装包或H5地址]
[可重现代码片段]
<script>
export default {
onLaunch: function() {
console.log('App Launch')
this.startgetLocation();
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
},
methods: {
async startgetLocation() {
var that = this;
try {
console.debug("loop start");
await that.getLocation();
} catch (e) {
console.debug("catch :" + e);
}
console.debug("loop end");
setTimeout(function() {
that.startgetLocation();
}, 1000);
},
getLocation: () => {
return new Promise((resolve, reject) => {
uni.getLocation({
type: 'gcj02',
// geocode: true,
success: function(res) {
reject('suc');
},
fail: function(err) {
reject('err');
},
complete: function(res) {
resolve('cmp');
}
});
})
}
}
}
</script>
<style>
</style>
联系方式
18057290017
[QQ]
1204572640
bshenjn (作者)
可以,感谢感谢
2020-01-14 12:38