我正在为Garmin Vivoactive HR开发一款手表应用程序,它会定期向手机发送数据(使用ConnectIQ SDK V2.3.4)。
可用内存在重复调用Communications.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()函数中的错误?
答案 0 :(得分:0)
试试这个
Comm.transmit(dataObj,null,listener);
dataObj = null;