fix: 回退BufferQueue检测逻辑,恢复正常采集流程

- 回退到d4f27bb的ScreenCaptureManager基础版本
- 移除bufferQueueAbandoned标志和Surface.isValid每帧检测(误杀正常采集)
- 移除VirtualDisplay.Callback和setSurface(null)(破坏MediaProjection session)
- 保留VirtualDisplay重建次数限制(最多3次)防止无限循环
- 保留CancellationException向上传播防止协程取消被吞
- 保留日志级别优化(Log.e降为Log.w)
This commit is contained in:
wdvipa
2026-02-14 23:40:40 +08:00
parent af28985c29
commit a277021a7a

View File

@@ -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
}
}
}