优化时间延迟
This commit is contained in:
@@ -34,10 +34,9 @@ import com.sw.inbound.model.response.SearchGoodsInfo
|
||||
import com.sw.inbound.objbox.FoodModule
|
||||
import com.sw.inbound.sdk.SensorScaleUtils
|
||||
import com.sw.inbound.utils.BitmapCropper
|
||||
import com.sw.inbound.utils.BitmapSaver
|
||||
import com.sw.inbound.utils.CameraUtils
|
||||
import com.sw.inbound.utils.ImageUtil
|
||||
import com.sw.inbound.utils.ToastUtils
|
||||
import com.sw.inbound.utils.PreciseDelayHandler
|
||||
import com.sw.inbound.utils.ext.dp
|
||||
import com.sw.inbound.utils.ext.gone
|
||||
import com.sw.inbound.utils.ext.hideKeyboard
|
||||
@@ -46,8 +45,6 @@ import com.sw.inbound.utils.ext.toJsonString
|
||||
import com.sw.inbound.utils.ext.toast
|
||||
import com.sw.inbound.viewmodel.ReceiptViewModel
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import timber.log.Timber
|
||||
import java.io.File
|
||||
@@ -68,7 +65,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
||||
public const val IS_NEW_RECEIPT = "isNewReceipt"
|
||||
|
||||
const val PAGE_SIZE = 10
|
||||
private const val DELAY_TIME = 5 * 1000
|
||||
private const val DELAY_TIME: Long = 3 * 1000
|
||||
}
|
||||
|
||||
var isReceiptPage: Boolean = false
|
||||
@@ -147,7 +144,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
||||
}
|
||||
}
|
||||
cameraUtils.setPreviewController(previewView)
|
||||
startTime = System.currentTimeMillis()
|
||||
//startTime = System.currentTimeMillis()
|
||||
binding.root.postDelayed({
|
||||
SensorScaleUtils.addWeightListener {
|
||||
runOnUiThread {
|
||||
@@ -202,7 +199,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
||||
recognizeFood()
|
||||
}
|
||||
|
||||
var startTime = 0L
|
||||
//var startTime = 0L
|
||||
var isFirstRecognize = true
|
||||
|
||||
private val takePhotoSuccessCallback: (Uri) -> Unit = { uri ->
|
||||
@@ -215,16 +212,17 @@ abstract class GoodsListActivity : ComponentActivity() {
|
||||
}.start()
|
||||
}
|
||||
|
||||
fun delayRecognizeFood() {
|
||||
if (abs(lastWeight) < 10) {
|
||||
return
|
||||
private val delayHandler by lazy {
|
||||
PreciseDelayHandler()
|
||||
}
|
||||
window.decorView.postDelayed(
|
||||
{
|
||||
|
||||
fun delayRecognizeFood() {
|
||||
if (abs(lastWeight) < 10) return
|
||||
delayHandler.precisePostDelayed(DELAY_TIME) {
|
||||
runOnUiThread {
|
||||
recognizeFood()
|
||||
},
|
||||
DELAY_TIME.toLong()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun recognizeFood() {
|
||||
@@ -283,9 +281,6 @@ abstract class GoodsListActivity : ComponentActivity() {
|
||||
targetWidth = 1000, targetHeight = 1300,
|
||||
offsetX = 30, offsetY = 100
|
||||
)
|
||||
if (bitmap.isRecycled.not()) {
|
||||
bitmap.recycle()
|
||||
}
|
||||
// val file = BitmapSaver.saveToAppFilesDir(
|
||||
// newBmp,
|
||||
// this,
|
||||
@@ -299,6 +294,9 @@ abstract class GoodsListActivity : ComponentActivity() {
|
||||
//foodList = foodList.map { it.split("WP")[0] }
|
||||
|
||||
val foodList = FoodModule.getFoodScoreList(newBmp)
|
||||
if (bitmap.isRecycled.not()) {
|
||||
bitmap.recycle()
|
||||
}
|
||||
if (newBmp.isRecycled.not()) {
|
||||
newBmp.recycle()
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ class GoodsRecognizeDialog(
|
||||
goods = list[position]
|
||||
) {
|
||||
activity?.addGoods(it)
|
||||
activity?.startTime = System.currentTimeMillis()
|
||||
//activity?.startTime = System.currentTimeMillis()
|
||||
dismiss()
|
||||
}.show()
|
||||
}
|
||||
@@ -79,7 +79,7 @@ class GoodsRecognizeDialog(
|
||||
binding.ivClose.setOnClickListener {
|
||||
dismiss()
|
||||
activity?.delayRecognizeFood()
|
||||
activity?.startTime = System.currentTimeMillis()
|
||||
//activity?.startTime = System.currentTimeMillis()
|
||||
}
|
||||
binding.btnManuallyFind.setOnClickListener {
|
||||
findGoods()
|
||||
|
||||
@@ -69,7 +69,7 @@ class GoodsSearchDialog(
|
||||
goods = list[clickIndex]
|
||||
) {
|
||||
activity?.addGoods(it)
|
||||
activity?.startTime = System.currentTimeMillis()
|
||||
//activity?.startTime = System.currentTimeMillis()
|
||||
activity?.goodsRecognizeDialog?.dismiss()
|
||||
dismiss()
|
||||
}.show()
|
||||
|
||||
@@ -2,13 +2,11 @@ package com.sw.inbound.sdk
|
||||
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import com.sw.inbound.utils.MessageEvent
|
||||
import com.sw.inbound.utils.ThreadUtils
|
||||
import com.sw.inbound.utils.ToastUtils
|
||||
import com.wabon.wbintelligenthardwaresdk.api.SensorScale
|
||||
import com.wabon.wbintelligenthardwaresdk.api.SensorScale.OnScaleResult
|
||||
import kotlinx.coroutines.delay
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import timber.log.Timber
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
|
||||
@@ -9,10 +9,11 @@ object ImageUtil {
|
||||
fun uriToBitmap(context: Context, uri: Uri): Bitmap? {
|
||||
return try {
|
||||
val options = BitmapFactory.Options()
|
||||
options.inSampleSize = 10; // 这会将图片的尺寸缩小到原来的1/2
|
||||
options.inSampleSize = 2; // 这会将图片的尺寸缩小到原来的1/2
|
||||
options.inJustDecodeBounds = false
|
||||
options.inPreferredConfig = Bitmap.Config.RGB_565
|
||||
context.contentResolver.openInputStream(uri)?.use { stream ->
|
||||
BitmapFactory.decodeStream(stream)
|
||||
BitmapFactory.decodeStream(stream, null, options)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package com.sw.inbound.utils
|
||||
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.SystemClock
|
||||
import android.util.Log
|
||||
|
||||
class PreciseDelayHandler {
|
||||
val TAG = "PreciseDelayHandler"
|
||||
|
||||
private val handler = Handler(Looper.getMainLooper())
|
||||
private var isRunning = false
|
||||
private var endTime = 0L
|
||||
|
||||
/**
|
||||
* 精确延迟执行
|
||||
* @param delayMillis 总延迟时间(毫秒)
|
||||
* @param runnable 要执行的任务
|
||||
*/
|
||||
fun precisePostDelayed(delayMillis: Long, block:()-> Unit) {
|
||||
isRunning = true
|
||||
endTime = SystemClock.uptimeMillis() + delayMillis
|
||||
|
||||
val ticker = object : Runnable {
|
||||
override fun run() {
|
||||
if (!isRunning) return
|
||||
|
||||
val now = SystemClock.uptimeMillis()
|
||||
val interval = now - endTime
|
||||
if (interval >= 0) {
|
||||
block()
|
||||
isRunning = false
|
||||
} else {
|
||||
// 计算下一个整百毫秒时间点进行校准
|
||||
val next = now + (100 - now % 100)
|
||||
handler.postAtTime(this, next)
|
||||
}
|
||||
}
|
||||
}
|
||||
handler.post(ticker)
|
||||
}
|
||||
|
||||
/**
|
||||
* 精确循环执行
|
||||
* @param interval 执行间隔(毫秒)
|
||||
* @param runnable 要执行的任务
|
||||
*/
|
||||
fun preciseLoop(interval: Long, block:()-> Unit) {
|
||||
isRunning = true
|
||||
|
||||
val ticker = object : Runnable {
|
||||
override fun run() {
|
||||
if (!isRunning) return
|
||||
|
||||
val startTime = SystemClock.uptimeMillis()
|
||||
block()
|
||||
|
||||
val elapsed = SystemClock.uptimeMillis() - startTime
|
||||
val remainingDelay = interval - elapsed
|
||||
|
||||
if (remainingDelay > 0) {
|
||||
handler.postDelayed(this, remainingDelay)
|
||||
} else {
|
||||
handler.post(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
handler.post(ticker)
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消所有延迟任务
|
||||
*/
|
||||
fun cancelAll() {
|
||||
isRunning = false
|
||||
handler.removeCallbacksAndMessages(null)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取是否正在运行
|
||||
*/
|
||||
fun isRunning(): Boolean = isRunning
|
||||
}
|
||||
Reference in New Issue
Block a user