Android HERE api 绘制很多 MapMarkers 很慢
Android HERE api drawing many MapMarkers is slow
我有一个应用程序,我们需要在其中绘制各种不同车辆的路线。我们需要用标记来标记小径,以显示他们每分钟一次面对的方向。我们最终得到的是多达 100,000 个标记需要绘制。
据我所知,我们可以实际绘制所述标记的唯一方法是生成一个位图并将其传递给 API,但这最终会占用大量内存并且速度慢得无法使用。我已经在代码中添加了缓存,这样除非绝对需要,否则不会生成位图,但它仍然太慢了。例如,在 Nexus 5 上绘制约 10,000 个标记大约需要 30 秒。然而,绘制实际的多段线非常快(但我需要沿多段线进行标记)。 MapKit(来自 Apple)在不到半秒的时间内在 iPhone 5 上绘制了相同数量的标记,大概是因为我们不必生成位图。所以..
- 绘制大量
MapMarkers
的推荐方法是什么?
- 是否可以绘制
Drawable
而不是 Image
?
- 此外,是否有一种有效的方法可以从
Map
中删除所有标记?目前我必须一个接一个地做,这又是非常慢的(removeMapObjects
只是在循环中调用 removeMapObject
)。
- 我应该用不同的方式解决这个问题吗?
可能值得一提的是,慢代码肯定是HERE SDK,具体是Map.addMapObjects
和Map.removeMapObjects
,我显然传入了MapMarker
个实例。
如果您正在执行以下操作:
foreach(MapObject m: myObjects)
map.addMapObject(m);
那么这应该会有很大帮助:
map.executeSynchronized(new Runnable() {
public void run() {
foreach(MapObject m: myObjects)
map.addMapObject(m);
}
});
每次添加地图对象时都会重新绘制地图。使用 execute synchronized 应该批处理更新操作要快得多。此外,强烈建议您缓存任何 Image 对象并在它们相同时重新使用相同的图像。在内部,渲染器将共享相同的纹理句柄。
我有一个应用程序,我们需要在其中绘制各种不同车辆的路线。我们需要用标记来标记小径,以显示他们每分钟一次面对的方向。我们最终得到的是多达 100,000 个标记需要绘制。
据我所知,我们可以实际绘制所述标记的唯一方法是生成一个位图并将其传递给 API,但这最终会占用大量内存并且速度慢得无法使用。我已经在代码中添加了缓存,这样除非绝对需要,否则不会生成位图,但它仍然太慢了。例如,在 Nexus 5 上绘制约 10,000 个标记大约需要 30 秒。然而,绘制实际的多段线非常快(但我需要沿多段线进行标记)。 MapKit(来自 Apple)在不到半秒的时间内在 iPhone 5 上绘制了相同数量的标记,大概是因为我们不必生成位图。所以..
- 绘制大量
MapMarkers
的推荐方法是什么? - 是否可以绘制
Drawable
而不是Image
? - 此外,是否有一种有效的方法可以从
Map
中删除所有标记?目前我必须一个接一个地做,这又是非常慢的(removeMapObjects
只是在循环中调用removeMapObject
)。 - 我应该用不同的方式解决这个问题吗?
可能值得一提的是,慢代码肯定是HERE SDK,具体是Map.addMapObjects
和Map.removeMapObjects
,我显然传入了MapMarker
个实例。
如果您正在执行以下操作:
foreach(MapObject m: myObjects)
map.addMapObject(m);
那么这应该会有很大帮助:
map.executeSynchronized(new Runnable() {
public void run() {
foreach(MapObject m: myObjects)
map.addMapObject(m);
}
});
每次添加地图对象时都会重新绘制地图。使用 execute synchronized 应该批处理更新操作要快得多。此外,强烈建议您缓存任何 Image 对象并在它们相同时重新使用相同的图像。在内部,渲染器将共享相同的纹理句柄。