优化拥堵策略
This commit is contained in:
@@ -5,7 +5,6 @@ import android.util.ArrayMap
|
||||
import com.mogo.module.share.constant.HttpConstant
|
||||
import com.mogo.module.share.net.ShareApiService
|
||||
import com.mogo.service.IMogoServiceApis
|
||||
import com.mogo.service.network.IMogoNetwork
|
||||
import com.mogo.service.tanlu.IMogoTanluProvider
|
||||
import com.mogo.service.tanlu.TanluUploadParams
|
||||
import com.mogo.utils.logger.Logger
|
||||
@@ -15,17 +14,35 @@ import com.mogo.utils.logger.Logger
|
||||
* 速度记录间隔,单位是毫秒
|
||||
*/
|
||||
private const val SPEED_RECORD_TIME_INTERVAL = 2 * 60 * 1000L
|
||||
|
||||
/**
|
||||
* 停车标志位阈值,单位是次,两秒一次
|
||||
*/
|
||||
private const val STOP_FLAG_THRESHOLD = 30
|
||||
private const val TAG = "BlockUploadStrategy"
|
||||
|
||||
/**
|
||||
* 用于计算拥堵策略
|
||||
*/
|
||||
class BlockStrategy(private val apis:IMogoServiceApis) {
|
||||
class BlockStrategy(private val apis: IMogoServiceApis) {
|
||||
private var startRecordTime: Long = 0
|
||||
private var speedCacheList = ArrayList<Float>()
|
||||
|
||||
/**
|
||||
* 停车标志位,当速度为0时加1,超过[STOP_FLAG_THRESHOLD]判定为停车,不认为是拥堵,这组数据无效
|
||||
*/
|
||||
private var stopFlag = 0
|
||||
|
||||
/**
|
||||
* 拥堵速度计算上报策略
|
||||
* 计算[SPEED_RECORD_TIME_INTERVAL]内的平均速度,并上报
|
||||
*
|
||||
* 定义的此方法是每两秒钟调用一次, 两分钟为一段进行计算 |--两分钟--|--两分钟--|--两分钟--|
|
||||
*
|
||||
* 里面有一个小策略,使用了一个停车标志位,如果速度为0,停车标志位加一,一个两分钟时间段内,
|
||||
* 停车标志为累加超过[STOP_FLAG_THRESHOLD]判定为停车,不是拥堵,舍弃掉整个两分钟数据,不进行上报,
|
||||
* 否则上报服务端,返回是否抓取视频
|
||||
*
|
||||
* @param speed 当前速度,单位需要是Km/h
|
||||
*/
|
||||
fun recordSpeed(speed: Float) {
|
||||
@@ -33,21 +50,32 @@ class BlockStrategy(private val apis:IMogoServiceApis) {
|
||||
if (startRecordTime == 0L) {
|
||||
// 数据初始化
|
||||
startRecordTime = current
|
||||
stopFlag = 0
|
||||
speedCacheList.clear()
|
||||
}
|
||||
|
||||
speedCacheList.add(speed)
|
||||
|
||||
if (speed == 0F) {
|
||||
stopFlag++
|
||||
}else{
|
||||
stopFlag = 0
|
||||
}
|
||||
|
||||
if (current - startRecordTime >= SPEED_RECORD_TIME_INTERVAL) {
|
||||
// 到达时间限制,上报速度,数据清空
|
||||
var sum = 0F
|
||||
speedCacheList.forEach {
|
||||
sum += it
|
||||
if(stopFlag < STOP_FLAG_THRESHOLD) {
|
||||
// 停车标志位小于阈值,判定不是停车,计算平均值,进行上报
|
||||
var sum = 0F
|
||||
speedCacheList.forEach {
|
||||
sum += it
|
||||
}
|
||||
val ave = sum / speedCacheList.size
|
||||
Logger.d(TAG, "平均速度为: $ave")
|
||||
// 上报平均速度
|
||||
uploadAverageSpeed(ave)
|
||||
}
|
||||
val ave = sum / speedCacheList.size
|
||||
Logger.d(TAG, "平均速度为: $ave")
|
||||
// 上报平均速度
|
||||
uploadAverageSpeed(ave)
|
||||
startRecordTime = 0
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user