Утечка памяти на Garmin Vivoactive HR в функции BLE Transmit
Я разрабатываю приложение для часов Garmin Vivoactive HR, которое будет периодически отправлять данные на телефон (используя ConnectIQ SDK V2.3.4).
Доступная память уменьшается при повторном вызове функции Communications.transmit(...) до тех пор, пока приложение не выйдет из-за недостатка памяти.
Я проверил свое приложение с закомментированным вызовом Transfer (), и проблема не возникает, поэтому я думаю, что это либо утечка памяти в функции Transfer (), либо существует (насколько я могу судить) недокументированная необходимость сделайте что-нибудь, чтобы освободить память после передачи ().
Соответствующий фрагмент моего тестового кода находится здесь:
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, потому что я не могу заставить работать linux-версию симулятора garmin. Похоже, что это похоже на более раннюю проблему, которую, по-видимому, исправила Гармин ( https://forums.garmin.com/forum/developers/connect-iq/100499-periodic-ble-transmit-causes-memory-leak), но я похоже, что вы не можете войти на форумы Garmin и сообщить об этом там.
Кто-нибудь знает, если я делаю что-то не так и должен просить освободить память, или это похоже на ошибку в функции Communications.transmit() SDK?
1 ответ
Попробуй это
Comm.transmit(dataObj,null,listener);
dataObj = null;