浏览代码

优化设备初始化时机

Frankensteinly 9 月之前
父节点
当前提交
51933f48b6

+ 1 - 0
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -122,6 +122,7 @@ object BusinessManager {
             LogUtil.i("设备状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
             res.forEach { bytes ->
                 val dockBean = ModBusController.updateStatus(bytes) ?: return@forEach
+                ModBusController.isInitReady = true
                 if (!CAN_RETURN) {
                     return@forEach
                 }

+ 11 - 4
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -23,6 +23,8 @@ import java.util.stream.Collectors
  */
 object ModBusController {
 
+    var isInitReady = false
+
     /**
      * 底座列表
      */
@@ -136,10 +138,15 @@ object ModBusController {
                 // TODO 通过HTTP获取所有钥匙的Mac
             }
             // TODO 待完善
-            Executor.delayOnMain(REPEAT_FREQUENCY * 3) {
-                initLock()    // 打开所有无锁的卡扣、关闭所有有锁的卡扣、读取所有锁的RFID
-                initKey()     // 打开所有无钥匙的卡扣、关闭所有有钥匙的卡扣、关闭所有钥匙灯光、读取所有钥匙的RFID
-            }
+            Executor.repeatOnMain({
+                if (isInitReady) {
+                    initLock()    // 打开所有无锁的卡扣、关闭所有有锁的卡扣、读取所有锁的RFID
+                    initKey()     // 打开所有无钥匙的卡扣、关闭所有有钥匙的卡扣、关闭所有钥匙灯光、读取所有钥匙的RFID
+                    return@repeatOnMain false
+                } else {
+                    return@repeatOnMain true
+                }
+            }, REPEAT_FREQUENCY, true)
         }
     }
 

+ 7 - 0
app/src/main/java/com/grkj/iscs/util/Executor.kt

@@ -68,6 +68,13 @@ object Executor {
         }, delayMills)
     }
 
+    fun delayOnIO(delayMills: Long, runnableTimeoutMillis: Long = 10_000, run: Runnable) {
+        val traces = Thread.currentThread().stackTrace
+        ioHandler.postDelayed({
+            runWithTraces(traces, run, runnableTimeoutMillis)
+        }, delayMills)
+    }
+
     fun repeatOnIO(run: () -> Boolean, intervalMills: Long, immediately: Boolean = true, runnableTimeoutMillis: Long = 5_000) {
         val traces = Thread.currentThread().stackTrace
         repeat(ioHandler, {