Android谷歌地图v2性能问题
我正在努力解决一个问题,并试图在几周内解决它,但没有一个解决方案满足我的需要。我的问题是,我必须向地图添加多个标记(>=6000),在所有的想法/建议和调查之后,我仍然存在性能问题,因为向地图添加标记时,它位于主线程上,即使标记是在后台线程中构建的 假设和进展:Android谷歌地图v2性能问题,android,google-maps,google-maps-android-api-2,Android,Google Maps,Google Maps Android Api 2,我正在努力解决一个问题,并试图在几周内解决它,但没有一个解决方案满足我的需要。我的问题是,我必须向地图添加多个标记(>=6000),在所有的想法/建议和调查之后,我仍然存在性能问题,因为向地图添加标记时,它位于主线程上,即使标记是在后台线程中构建的 假设和进展: private class MarkerTask extends AsyncTask<Positions, MarkerOptions, Void> { Projection projection; @Ov
private class MarkerTask extends AsyncTask<Positions, MarkerOptions, Void> {
Projection projection;
@Override
protected void onPreExecute() {
super.onPreExecute();
projection = mMap.getProjection();
}
@Override
protected Void doInBackground(Positions... params) {
List<Vessel> positionsList = new ArrayList<Vessel>(params[0].getList());
LatLngBounds bounds = projection.getVisibleRegion().latLngBounds;
for (int i = 0; i < positionsList.size(); i++) {
if (bounds.contains(locationLatLng) && interval.contains(DateTimeUtc)) {
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(locationLatLng);
markerOptions.title(name);
markerOptions.rotation(getHeading());
markerOptions.snippet(id);
markerOptions.anchor(Constants.MARKER_ANCHOR_CENTER, Constants.MARKER_ANCHOR_CENTER);
publishProgress(markerOptions);
positionsList.remove(i);
if (isCancelled())
break;
}
}
return null;
}
@Override
protected void onProgressUpdate(MarkerOptions... values) {
mMap.addMarker(values[0]);
mMap.setOnMarkerClickListener(onMarkerClick());
}
- 我已经读过了:
- 我正在使用集群
- 我只是添加可见区域的标记,以限制标记的数量并抑制不必要的负载
- 我已经尝试过使用处理程序,现在我正在使用Asynctask,因为我意识到它们要快一点(或者只是安慰剂)
- 目前,我正在onProgressUpdate(一个接一个)中添加标记,但我已经准备好发送列表并在OnPostExecute(结果)中添加标记,但性能最差
private class MarkerTask extends AsyncTask<Positions, MarkerOptions, Void> {
Projection projection;
@Override
protected void onPreExecute() {
super.onPreExecute();
projection = mMap.getProjection();
}
@Override
protected Void doInBackground(Positions... params) {
List<Vessel> positionsList = new ArrayList<Vessel>(params[0].getList());
LatLngBounds bounds = projection.getVisibleRegion().latLngBounds;
for (int i = 0; i < positionsList.size(); i++) {
if (bounds.contains(locationLatLng) && interval.contains(DateTimeUtc)) {
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(locationLatLng);
markerOptions.title(name);
markerOptions.rotation(getHeading());
markerOptions.snippet(id);
markerOptions.anchor(Constants.MARKER_ANCHOR_CENTER, Constants.MARKER_ANCHOR_CENTER);
publishProgress(markerOptions);
positionsList.remove(i);
if (isCancelled())
break;
}
}
return null;
}
@Override
protected void onProgressUpdate(MarkerOptions... values) {
mMap.addMarker(values[0]);
mMap.setOnMarkerClickListener(onMarkerClick());
}
私有类标记任务扩展异步任务{
投影;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
projection=mMap.getProjection();
}
@凌驾
受保护的空doInBackground(位置…参数){
列表位置列表=新的ArrayList(参数[0].getList());
LatLngBounds bounds=projection.getVisibleRegion().LatLngBounds;
对于(int i=0;i
有没有关于如何提高性能的建议???我想知道为什么这个问题被否决了!这是一个真正的问题,而且是一个形成良好的问题,这是一个太多开发人员都在面对的问题,以提高地图性能观看:和其他视频。性能问题很多时候也是特定于应用程序的。因此,您可能需要检查性能最佳p优化应用程序性能的实践和其他信息。首先。建议检查所有应用程序性能,就像使用标记聚类一样。即使使用1000多个标记,性能也没有问题。你似乎没有那么多。@KayAnn我知道最好的实践,但我只是看了一下我忘记的案例方法但不,我改变了我的问题,因为它不是>=60个标记,而是>=6000个标记。是的,我正在使用聚类。你看过这个吗: