【发布时间】:2012-12-20 16:42:39
【问题描述】:
我正在尝试绘制一些实时数据,这里的“实时”意味着
return mXY.subMap(start, stop);
为:
return new TreeMap<Double, Double>(mXY.subMap(start, stop));
这会创建大量分配(尽管仍由原始 subMap 支持),但最好在 onDraw 进行时将更新排队并稍后在原子更新或该行上的某些东西上处理它们以避免并发问题。
真正的遗憾是 ACE 的速度确实足以满足我的需要。它可以在我的硬件上完美地完成我需要的事情,但是由于它在重绘上分配了如此多的资源,因此 Android 对 GC 感到很疯狂。它很快就会在 GC 运行时开始分配,所以它必须等待,我的应用开始看起来像定格电影。
但真正的问题是:期望能够使用 ACE 实时(低于 200 毫秒的刷新率)重绘 4 或 6 个折线图(平板电脑应用程序)是否合理,或者它根本没有为这种滥用做好准备? 如果答案是否定的。您还有其他选择吗?
编辑 20130109: 修订版 471 对小型数据集进行了相当大的改进。 2.000 点 / 4 个图表 / 100 毫秒刷新率是可行且流畅的。日志仍然会疯狂地看到“GC_CONCURRENT freed”(大约 10/秒),但没有“WAIT_FOR_CONCURRENT_GC blocked”,这是让您的应用停止运动的关键。 在 3.000 点/1 个图表/100 毫秒时,它显然 不 平滑。我们再次在 logcat 和口吃应用程序上遇到“WAIT_FOR_CONCURRENT_GC 被阻止”的雪崩。再次看起来我们没有速度问题,只有内存管理问题。
看起来我可能会要求 ACE 变魔术,但在重构所有代码以检索和存储 1KHz 的遥测数据后,我碰壁了。一旦我终于看到我的应用程序在不触发 GC 的情况下实时检索和存储所有这些内容,我在尝试绘制图表时用 ACE 拉扯头发:)
【问题讨论】:
-
能否请您分享指向您的源代码或任何特定于在 Android 应用中绘制心电图的教程的链接。我试图达到同样的效果,但我无法理解如何绘制 X 轴;从心电图设备解析心电图数据后,我得到的是一个数字数组:0.74、0.732、..等
标签: android achartengine