我正在为Garmin Vivoactive HR开发一个手表应用程序,它将定期向手机发送数据(使用ConnectIQ SDKV2.3.4)。
可用内存会随着Communications.transmit(...)函数会被重复调用,直到应用程序在内存不足时崩溃。
我已经用transmit()调用注释掉了我的应用程序,问题没有发生,所以我认为这要么是transmit()函数中的内存泄漏,要么是(据我所知)在transmit()调用之后需要做一些未记录的事情来释放内存。
下面是我的测试代码的相关部分:
function initialize() {
View.initialize();
listener = new Comm.ConnectionListener();
}
function timerCallback() {
var dataObj = {
"HR"=> 60,
"X" => 0,
"Y" => 0,
"Z" => 0
};
// FIXME - THIS CRASHED WITH OUT OF MEMORY ERROR AFTER 5 or 10 minutes.
Comm.transmit(dataObj,null,listener);
Ui.requestUpdate();
}
// Load your resources here
function onLayout(dc) {
width = dc.getWidth();
height = dc.getHeight();
myTimer = new Timer.Timer();
myTimer.start(method(:timerCallback), 1000, true);
}完整的测试应用程序在运行时会在监视屏幕上显示可用内存,如下所示:https://github.com/OpenSeizureDetector/Garmin_SD/tree/master/MemTest
我只能在Vivoactive HR设备上测试它,因为我无法运行garmin模拟器的linux版本。它看起来与Garmin显然修复(https://forums.garmin.com/forum/developers/connect-iq/100499-periodic-ble-transmit-causes-memory-leak)的早期问题类似,但我似乎无法登录Garmin论坛在那里报告它。
有没有人知道我做错了什么,应该要求释放内存,或者这看起来像是SDK的Communications.transmit()函数中的错误吗?
发布于 2018-03-17 04:05:05
尝尝这个
Comm.transmit(dataObj,null,listener);
dataObj = null;https://stackoverflow.com/questions/46748009
复制相似问题