程序耗时时间打印

比如现在在做的百度地图撒点项目,5个图层从数据库获取到2000多个点需要铺在地图上,使用了rxjava+retrofit2进行网络请求,这个时候同时移动地图是不会造成地图卡顿的,但是在移动的实际过程中缺出现了卡顿,那么怀疑是往地图上添加图标的过程中出现了耗时操作,于是在对每个for循环进行耗时时间打印,结果果然发现在抽稀步骤时时间比较长,于是在这里改用多线程进行操作。

/**
     * 从数据库获取图层中的点
     */
    public void getLayerPointList(LayerConfig layerConfig, LatLng[] pts, double zoomLevel) {

        long l = System.currentTimeMillis();
        if (pts != null && pts.length > 0) {
            latitude0 = pts[0].latitude; //左上角坐标
            longitude0 = pts[0].longitude;
            latitude1 = pts[1].latitude; //右下角坐标
            longitude1 = pts[1].longitude;
        }
        String table = layerConfig.getTableName();
//        subScribe = ApiManager.getInstance()
        ApiManager.getInstance()
                .pointApiService()
                .getManagerSelect(table, latitude0, longitude0, latitude1, longitude1)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(listResponseObj -> {
                    List> pointList = listResponseObj.data;  //该图层在屏幕内的点
                    long end1 = System.currentTimeMillis();
                    long l1 = end1 - l;
                    Log.e("LayerConfig", "异步请求数据时间:" + l1);
                    Log.e("LayerConfig", "通过查询sql语句查询点获取成功:" + pointList.size() + "");

                    //2、遍历服务端返回的对象map

                    if (pointList != null && pointList.size() > 0) {
                        //3、抽稀算法,去除重复的点。遍历所有图层的所有站点列表,生成绘制任务列表,任务ID=layerId +“_”+ PointId
                        allNewTaskIdList.clear();
                        long l2a = System.currentTimeMillis();
                        if (zoomLevel <= 13) {  //2公里比例尺
//                        vacuateMap.clear();
//                            long l2b = System.currentTimeMillis();
//                            for (LinkedHashMap stringObjectMap : pointList) {
//                                double latitude = (double) stringObjectMap.get("LATITUDE");
//                                double longitude = (double) stringObjectMap.get("LONGITUDE");
//                                BigDecimal b_latitude = new BigDecimal(latitude).setScale(2, BigDecimal.ROUND_HALF_UP);
//                                BigDecimal b_longitude = new BigDecimal(longitude).setScale(2, BigDecimal
//                                        .ROUND_HALF_UP);
//
//                                if (!vacuateMap.containsKey(b_latitude + "/" + b_longitude)) {
//                                    vacuateMap.put(b_latitude + "/" + b_longitude, stringObjectMap);
//                                }
//                            }
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    long l2d = System.currentTimeMillis();
                                    for (int i = 0; i < pointList.size()/2; i++) {
                                        LinkedHashMap stringObjectMap = pointList.get(i);
                                        double latitude = (double) stringObjectMap.get("LATITUDE");
                                        double longitude = (double) stringObjectMap.get("LONGITUDE");
                                        BigDecimal b_latitude = new BigDecimal(latitude).setScale(2, BigDecimal.ROUND_HALF_UP);
                                        BigDecimal b_longitude = new BigDecimal(longitude).setScale(2, BigDecimal
                                                .ROUND_HALF_UP);
                                        if (!vacuateMap.containsKey(b_latitude + "/" + b_longitude)) {
                                            vacuateMap.put(b_latitude + "/" + b_longitude, stringObjectMap);
                                        }
                                    }
                                    long l22d = System.currentTimeMillis();
                                    long l2djian = l22d - l2d;
                                    Log.e("LayerConfig", "新线程抽稀时间1:" + l2djian);
                                }
                            }).start();
                            new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    long l2d = System.currentTimeMillis();
                                    for (int i = pointList.size()/2; i < pointList.size(); i++) {
                                        LinkedHashMap stringObjectMap = pointList.get(i);
                                        double latitude = (double) stringObjectMap.get("LATITUDE");
                                        double longitude = (double) stringObjectMap.get("LONGITUDE");
                                        BigDecimal b_latitude = new BigDecimal(latitude).setScale(2, BigDecimal.ROUND_HALF_UP);
                                        BigDecimal b_longitude = new BigDecimal(longitude).setScale(2, BigDecimal
                                                .ROUND_HALF_UP);
                                        if (!vacuateMap.containsKey(b_latitude + "/" + b_longitude)) {
                                            vacuateMap.put(b_latitude + "/" + b_longitude, stringObjectMap);
                                        }
                                    }
                                    long l22d = System.currentTimeMillis();
                                    long l2djian = l22d - l2d;
                                    Log.e("LayerConfig", "新线程抽稀时间2:" + l2djian);
                                }
                            }).start();

//                            long l22b = System.currentTimeMillis();
//                            long l2bjian = l22b - l2b;
//                            Log.e("LayerConfig", "抽稀时间:" + l2bjian);
                            long l2c = System.currentTimeMillis();
                            for (String singleVacuatePoint : vacuateMap.keySet()) {
                                Map stringObjectMap = vacuateMap.get(singleVacuatePoint);
                                Object pointId = stringObjectMap.get("P_ID");
                                allNewTaskIdList.add(table + "_" + pointId); //请求到的点
                            }
                            long l22c = System.currentTimeMillis();
                            long l2cjian = l22c - l2c;
                            Log.e("LayerConfig", "allNewTaskIdList:" + l2cjian);
                        } else {
                            for (Map stringObjectMap : pointList) {
                                Object pointId = stringObjectMap.get("P_ID");
                                allNewTaskIdList.add(table + "_" + pointId); //请求到的点
                            }
                        }
                        long l22a = System.currentTimeMillis();
                        long l2ajian = l22a - l2a;
//                        Log.e("LayerConfig", "抽稀后的点的数量:" + vacuateMap.size());
                        Log.e("LayerConfig", "allNewTaskIdList总时间:" + l2ajian);

                        //4、调用optimiz方法
                        long l3 = System.currentTimeMillis();
                        List addTaskIdList = optimizeTask(allNewTaskIdList);
                        long l33 = System.currentTimeMillis();
                        long l3jian = l33 - l3;
                        Log.e("LayerConfig", "optimizeTask时间:" + l3jian);

                        long l2d = System.currentTimeMillis();
                        for (Map stringObjectMap : pointList) {
                            //stringObjectMap站点
                            String pointId = String.valueOf(stringObjectMap.get("P_ID"));
                            String taskId = table + "_" + pointId;
                            if (addTaskIdList.contains(taskId)) { //待添加到地图上的点
                                // 放在for循环之内,只有在需要添加的时候才获取
                                String latitude = String.valueOf(stringObjectMap.get("LATITUDE"));
                                String longitude = String.valueOf(stringObjectMap.get("LONGITUDE"));

                                Bitmap icon = IconDrawer.getInstance().getIcon(stringObjectMap, layerConfig);
                                BasePointInfo basePointInfo = new BasePointInfo();
                                basePointInfo.setLayerId(table);
                                basePointInfo.setPointId(pointId); //pointId来自map中的get("pointId")
                                basePointInfo.setLatitude(latitude + "");
                                basePointInfo.setLongitude(longitude + "");
                                basePointInfo.setIcon(icon);
                                basePointInfo.setMap(stringObjectMap);
                                toBeAddedList.add(basePointInfo);

                                //将点添加到activePointListMap中作为下次更新时的页面原始点
                                activePointMap.put(taskId, basePointInfo); // TODO: 2017/6/13
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        iMapUse.addBasePoint(basePointInfo);
                                    }
                                }).start();

                            }
                        }
                        long l22d = System.currentTimeMillis();
                        long l2djian = l22d - l2d;
                        Log.e("LayerConfig", "添加到地图上时间:" + l2djian);
                    }
                    long end2 = System.currentTimeMillis();
                    long ll = end2 - end1;
                    Log.e("LayerConfig", "完成总时间:" + ll);
                }, throwable -> {
                    Log.e("LayerConfig", "通过查询sql语句查询点未获取成功");
                });
    }

你可能感兴趣的:(程序耗时时间打印)