diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/DistanceDegree.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/DistanceDegree.kt index 205510c9da..bc30038358 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/DistanceDegree.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/distancemamager/DistanceDegree.kt @@ -1,13 +1,54 @@ package com.mogo.och.common.module.manager.distancemamager -data class DistanceDegree(var distance:Float,var degree:Double?,var isNext:Boolean?):Comparable{ +data class DistanceDegree(var distance: Float, var degree: Double?, var isNext: Boolean?) : + Comparable { override fun compareTo(other: DistanceDegree): Int { // 对比距离 - if(distance == other.distance){ + if (distance == other.distance) { return 0; - } else if(distance < other.distance){ + } else if (distance < other.distance) { return -1; } return 1; } + + var next: DistanceDegree? = null + + fun recycle() { + synchronized(sPoolSync) { + if (sPoolSize < MAX_POOL_SIZE) { + next = sPool + sPool = this + sPoolSize++ + } + //Logger.d("DistanceDegree","缓存对象个数${sPoolSize}个") + } + } + + companion object { + var sPoolSync = Any() + private var sPool: DistanceDegree? = null + private var sPoolSize = 0 + private var MAX_POOL_SIZE = 20 + + + fun obtain(distance: Float, degree: Double?, isNext: Boolean?): DistanceDegree { + synchronized(sPoolSync) { + if (sPool != null) { + val m: DistanceDegree = sPool!! + sPool = m.next + m.next = null + m.distance = distance + m.degree = degree + m.isNext = isNext + sPoolSize-- + //Logger.d("DistanceDegree","取出一个对象个数${sPoolSize}个") + return m + } + //Logger.d("DistanceDegree","创建一个对象 ${sPoolSize}个") + return DistanceDegree(distance, degree, isNext) + } + } + } + } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.kt index 79444f76f5..164681283a 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/CoordinateCalculateRouteUtil.kt @@ -601,6 +601,7 @@ object CoordinateCalculateRouteUtil { type:Int, size:Int = 4 ): Triple { + val startTime = System.currentTimeMillis() Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength", "参数:[$preIndex $endIndex) mRoutePoints:${mRoutePoints.size} type:$type size:$size" + " location:(${location.latitude},${location.longitude},${location.heading})") @@ -615,9 +616,9 @@ object CoordinateCalculateRouteUtil { latLngIndex.longitude, latLngIndex.latitude ) - distanceMap[DistanceDegree(distance, null,null)] = index + distanceMap[DistanceDegree.obtain(distance, null,null)] = index if (distanceMap.size > size) { - distanceMap.pollLastEntry() + distanceMap.pollLastEntry()?.key?.recycle() } } distanceMap.forEach { @@ -687,6 +688,12 @@ object CoordinateCalculateRouteUtil { // 通过航向角过滤一遍 if(distanceDegree.degree!=null&&DrivingDirectionUtils.getAngleDiff(location.heading, distanceDegree.degree!!)<90){ currentIndex = pointIndex + val iterator1 = distanceMap.iterator() + while (iterator1.hasNext()) { + iterator1.next().key.recycle() + iterator1.remove() + } + distanceMap.clear() return Triple(currentIndex,distanceDegree.isNext,distanceDegree.distance) } } @@ -701,12 +708,14 @@ object CoordinateCalculateRouteUtil { val next = iterator.next() val key = next.key if (key.degree == null) { + key.recycle() iterator.remove() } else { if (location.heading != 0.0) { key.degree?.let { val dexAngle = DrivingDirectionUtils.getAngleDiff(location.heading, it) if (dexAngle > 90) { + key.recycle() iterator.remove() } } @@ -715,6 +724,14 @@ object CoordinateCalculateRouteUtil { } if(distanceMap.size==0&&size<16){ + val iterator1 = distanceMap.iterator() + while (iterator1.hasNext()) { + iterator1.next().key.recycle() + iterator1.remove() + } + distanceMap.clear() + Logger.d(SceneConstant.M_OCHCOMMON + "calculateRouteSumLength", + "计算时间:${startTime-System.currentTimeMillis()}") return getNearestPointInfo(preIndex,endIndex,mRoutePoints,location,type,size+2) } @@ -734,9 +751,25 @@ object CoordinateCalculateRouteUtil { if(preIndexDistance!=null&&preIndexNextDistance!=null){ if(preIndexDistance!!.distancemiddleVale){ + key.recycle() iteratorRemove.remove() } } @@ -773,6 +807,7 @@ object CoordinateCalculateRouteUtil { val next = iteratorRemove.next() val key = next.key if(next.value