- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试绘制一些实时数据的图表,这里的“实时”意味着 < 10 毫秒的数据,理想情况下尽可能低。我已经能够让 Android 如此快速地获取和处理数据,但 ACE 看起来似乎并不是为实时使用而设计的。第一个症状是垃圾收集器像没有明天一样启动并完全杀死应用程序。我正在以“滑动窗口”方式可视化数据,所以我并不期望 ACE 实时绘制千分之几十点。我看了一下它,XYChart 的 onDraw 在看起来很方便的情况下肯定会分配很多,并且可能使代码更具可读性但并不是真正需要的。这甚至可能比以前更糟,所以可能还没有引起注意。我看到问题 #225 的错误修正解决了一个并发问题:
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”,这是让您的应用停止运动的 showstoppers。在 3.000 点/1 个图表/100 毫秒时,它显然不平滑。我们再次在 logcat 和卡顿应用程序上遇到“WAIT_FOR_CONCURRENT_GC blocked”雪崩。同样看起来我们没有速度问题,只有内存管理问题。
我可能看起来像是在要求 ACE 施展魔法,但在重构我的所有代码以以 1KHz 的频率检索和存储遥测数据后,我碰壁了。当我终于看到我的应用程序实时检索和存储所有这些数据而根本没有触发 GC 时,我在尝试绘制图表时用 ACE 拉扯了我的头发 :)
最佳答案
首先感谢您提出的重要问题和观点。关于在 onDraw()
方法下完成的大量内存分配,您绝对是正确的。我修复了它并检查了 SVN 中的代码。我还在 onDraw()
方法中添加了一个同步块(synchronized block),这样在重绘期间向数据集添加新数据时,它有望不会抛出 ConcurrentModificationException
。
请从 SVN 检查代码并执行 ant dist 以构建新的 AChartEngine jar 文件并将其嵌入到您的应用程序中。请看说明书here .
回答您的问题:AChartEngine 绝对可以用于动态图表。您报告的问题是一个问题,但现在应该已修复。我已经使用它编写了动态图表。但是,您需要确保不要向数据集添加 100000 个数据值。可以从数据集中删除旧数据以获得性能。
5个左右的折线图,上千个点,画绝对合理。
关于android - 图表引擎准备好实时绘图了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14187716/
我想获取当前位置并将相机移动到当前位置,然后将当前位置 (LatLng) 保存到我的数据库 我获得了 ACCESS_FINE 权限并使用以下代码,但应用程序已停止工作 double lat = map
我想稍微优化一下这部分代码,以使用 $_SESSION['user']= $arr; 这样的数组。 // Store user db info in session for use $stmt = $
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我不确定 DaemonSet 中是否存在就绪条件。我的意思是,该 DaemonSet 拥有的所有 pod 都已准备就绪。 我知道 kubectl wait ,不过好像不能检查 DaemonSet 的准
我正在编写一个 JS 模块模式来测试代码并帮助我使用 JS Fiddle 理解该模式。我不明白的是,为什么第 25 行和第 26 行的“私有(private)方法”在通过 DOM 就绪引用时,其值为未
标题中有一个非常微妙的动画。当第一次加载页面,或者使用 cmd+shift+r (mac) 刷新以清除缓存时,jQuery 似乎并没有等待 DOM 准备好。它在所有正常的 html/css 弹出之前启
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我有两个问题: 我如何知道框架的内容已准备就绪/已加载(如 $(document.ready()))? 我如何知道弹出窗口 (window.open()) 内容已准备就绪/已加载(如 $(docume
只是想知道 document.ready 调用的数量是否会影响页面加载速度。Gulp/Grunt 有没有办法通过删除单独的文档就绪函数来丑化/缩小 JS? 最佳答案 检查一下! 我没有发现 Chrom
我有一个 的列表如下所示,它使用 Meteor.startup 填充了 find()。然后我得到这些 的所有数据属性使用 data() 并将其放入一个对象中并尝试返回/console.log 它以
我正在使用 trego 主题。作为主题选项,您可以设置和更改将出现在站点中的文本(例如“版权文本”和“ Logo url”的文本)。我如何使用 WPML 制作多语言版本?我想通过 wpml-confi
Zend_Service_Twitter 组件仍然适用于将于 2013 年 3 月 5 日弃用的 Twitters API v1.0。所以我想准备好我的新网站与 Twitter API 交互 v1.1
有没有一种优雅的方法来做到这一点?目前我只是使用自定义步骤 “并等待 10 秒”以绝对确定,有足够的时间让 iframe 做好准备。我不希望这个功能因为一个小的网络问题或 CPU 峰值而在我动力不足的
当我尝试在我的 VPS 上安装 Windows 时,我无法访问 Glish---图形网站控制台(但浏览器控制台可以工作)。 当我打开 Glish 控制台时,提示: novnc ready: nativ
生成新的全屏窗口时,相对于: sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) window = sdl2.ext.Window('win_name', (x_size, y_si
我刚刚为我的最新项目投入了 Umbraco ASP.NET CMS,我不确定这是否是全面的,但对于我的设置,Knockout.js 正在做所有的模板。 我不太热衷于 knockout.js,但到目前为
我是 jQuery 的新手,最近几天一直在尝试学习它。在我的办公室里,几乎没有经验丰富的 JavaScript 开发人员,他们主要使用 jQuery 来满足他们的所有需求,每当我找到他们并与他们交谈以
我目前正在编写一个脚本,我正在使用 while($IE.busy) {Start-Sleep 1} 等待页面准备就绪。 页面准备好后,我的脚本会填写并提交表单。我一直遇到问题,因为(我认为)IE 报告
这个问题已经有答案了: window.onload vs $(document).ready() (17 个回答) 已关闭 3 年前。 以下示例代码的执行顺序是什么?会$(window).on('lo
我是一名优秀的程序员,十分优秀!