gpt4 book ai didi

android - Android 中更高效的 map 叠加

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:32 24 4
gpt4 key购买 nike

在我的应用程序中,我在 MapView 上绘制公交路线.这些路线有十几个到几百个 GPS 坐标,描述了公共(public)汽车所走的路线。

Hosted by imgur.com

我遇到的问题是,一旦我画出所有这些线,平移/缩放 MapView 就会非常慢(即使单击“后退”按钮也需要一分钟)。

我不确定它有多相关,但我输入了一些调试代码然后检查了 logcat 输出并且 MapView 重复调用 draw() 方法的 Overlay是否有任何改变。这种情况每秒发生几次,并导致发生大量垃圾收集(每秒 2-3 MB)。

有没有人对尝试加快速度的方法有任何想法/建议?

最佳答案

我只用过ItemizedOverlay,没有用过Overlay,所以这些建议纯属猜想。哎呀,我什至没有对 2D 图形 API 做太多事情。

显然,最好的答案是让它一直停止调用 draw()。尝试记录一些堆栈跟踪,看看您是否可以找出触发所有 draw() 调用的原因。例如,最近在 Android Google Groups 中,有人注意到 Chronometer 会导致同一 UI 中的小部件每秒重绘一次。虽然我可以看到您没有 Chronometer,但您或许能够找出 draw() 调用的一些根本原因,您可以更正这些调用。

假设这没有帮助,我猜测“是否有任何变化”的测试是 getLatitudeSpan()getLongitudeSpan() 的某种组合, getZoomLevel(),可能还有其他 MapView 方法。而且,我假设在每个 draw() 上,您都在遍历 GPS 点并绘制路线。如果是这样,您可以尝试:

  1. 当你真的画画的时候,先画一个由Bitmap支持的Canvas,然后在Canvas上应用Bitmap 你被交给 draw(),并缓存那个 Bitmap
  2. 跟踪上一个draw()中使用了哪些值的组合,如果下一个draw()相同,就重用现有的Bitmap 。否则,转到第 1 步,确保释放位图(或重新使用它,如果可能的话)。

我猜测通过图形加速,将 Bitmap 加载到 Canvas 上比遍历坐标和绘制线条更便宜。而且,通过缓存 Bitmap,您将减少垃圾生成。

无论如何,只是一个想法。

关于android - Android 中更高效的 map 叠加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1663979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com