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:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user