BLE发送功能中Garmin Vivoactive HR的内存泄漏

时间:2017-10-14 18:32:26

标签: garmin monkeyc

我正在为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()函数中的错误?

1 个答案:

答案 0 :(得分:0)

试试这个

   Comm.transmit(dataObj,null,listener);
   dataObj = null;