Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android谷歌地图v2性能问题_Android_Google Maps_Google Maps Android Api 2 - Fatal编程技术网

Android谷歌地图v2性能问题

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

我正在努力解决一个问题,并试图在几周内解决它,但没有一个解决方案满足我的需要。我的问题是,我必须向地图添加多个标记(>=6000),在所有的想法/建议和调查之后,我仍然存在性能问题,因为向地图添加标记时,它位于主线程上,即使标记是在后台线程中构建的

假设和进展:

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个标记。是的,我正在使用聚类。你看过这个吗: