0

我正在为 Garmin Vivoactive HR 开发一个手表应用程序,它将定期向手机发送数据(使用 ConnectIQ SDK V2.3.4)。

可用内存随着 Communications.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() 函数中的错误?

4

1 回答 1

0

尝试这个

   Comm.transmit(dataObj,null,listener);
   dataObj = null;
于 2018-03-16T20:05:05.203 回答