From a277021a7a4f5af59db58a8b2a112a6e0c0ebd06 Mon Sep 17 00:00:00 2001 From: wdvipa Date: Sat, 14 Feb 2026 23:40:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9B=9E=E9=80=80BufferQueue=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E9=80=BB=E8=BE=91=EF=BC=8C=E6=81=A2=E5=A4=8D=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E9=87=87=E9=9B=86=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 回退到d4f27bb的ScreenCaptureManager基础版本 - 移除bufferQueueAbandoned标志和Surface.isValid每帧检测(误杀正常采集) - 移除VirtualDisplay.Callback和setSurface(null)(破坏MediaProjection session) - 保留VirtualDisplay重建次数限制(最多3次)防止无限循环 - 保留CancellationException向上传播防止协程取消被吞 - 保留日志级别优化(Log.e降为Log.w) --- .../java/com/hikoncont/manager/ScreenCaptureManager.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/hikoncont/manager/ScreenCaptureManager.kt b/app/src/main/java/com/hikoncont/manager/ScreenCaptureManager.kt index 27c2ca3..a5e9ddb 100644 --- a/app/src/main/java/com/hikoncont/manager/ScreenCaptureManager.kt +++ b/app/src/main/java/com/hikoncont/manager/ScreenCaptureManager.kt @@ -83,9 +83,9 @@ class ScreenCaptureManager(private val service: AccessibilityRemoteService) { // ✅ 图像获取失败计数 private var consecutiveImageFailures = 0 - private val maxImageFailuresBeforeRecreation = 5 // 连续5次失败即重建(加速回退) + private val maxImageFailuresBeforeRecreation = 10 // 连续10次失败才考虑重新创建 - // ✅ VirtualDisplay重建次数限制 + // ✅ VirtualDisplay重建次数限制,防止无限重建循环 private var virtualDisplayRebuildCount = 0 private val MAX_VIRTUAL_DISPLAY_REBUILD_ATTEMPTS = 3 @@ -484,6 +484,7 @@ class ScreenCaptureManager(private val service: AccessibilityRemoteService) { virtualDisplayRebuildCount++ Log.w(TAG, "⚠️ 连续 ${consecutiveFailures} 次无法获取有效帧,重建 VirtualDisplay (${virtualDisplayRebuildCount}/${MAX_VIRTUAL_DISPLAY_REBUILD_ATTEMPTS})") + // 重建次数超限,回退到无障碍截图 if (virtualDisplayRebuildCount > MAX_VIRTUAL_DISPLAY_REBUILD_ATTEMPTS) { Log.w(TAG, "🚨 重建次数已达上限,回退到无障碍截图") cleanupVirtualDisplayOnly() @@ -632,7 +633,7 @@ class ScreenCaptureManager(private val service: AccessibilityRemoteService) { } catch (e: Exception) { Log.w(TAG, "⚠️ 屏幕捕获失败: ${e.message}") consecutiveFailures++ - delay(100) + delay(100) // ✅ 出错时进一步缩短间隔,保持流畅度(从200ms改为100ms) } } }