diff --git a/app/src/main/java/com/hikoncont/manager/ScreenCaptureManager.kt b/app/src/main/java/com/hikoncont/manager/ScreenCaptureManager.kt index e4aaeb1..fc01b89 100644 --- a/app/src/main/java/com/hikoncont/manager/ScreenCaptureManager.kt +++ b/app/src/main/java/com/hikoncont/manager/ScreenCaptureManager.kt @@ -399,6 +399,7 @@ class ScreenCaptureManager(private val service: AccessibilityRemoteService) { var consecutiveFailures = 0 virtualDisplayRebuildCount = 0 // 重置重建计数 + bufferQueueAbandoned = false // 重置abandoned标志,确保采集循环正常启动 // ✅ 最小有效帧大小阈值:正常480×854 JPEG即使最低质量也>5KB // 低于此值的帧几乎肯定是黑屏/空白帧(VirtualDisplay未刷新) @@ -2260,19 +2261,12 @@ class ScreenCaptureManager(private val service: AccessibilityRemoteService) { */ private fun cleanupVirtualDisplayOnly() { try { - // ✅ 先切断VirtualDisplay与Surface的连接,阻止生产者继续dequeueBuffer - // 这是解决 "BufferQueue has been abandoned" 持续报错的关键 - try { - virtualDisplay?.surface = null - } catch (e: Exception) { - Log.w(TAG, "⚠️ 切断VirtualDisplay Surface连接失败: ${e.message}") - } - - // 释放VirtualDisplay + // 释放VirtualDisplay(停止生产者向Surface写帧) + // 注意:不使用setSurface(null),某些设备上会导致MediaProjection session失效 virtualDisplay?.release() virtualDisplay = null - // 关闭ImageReader(Surface随之销毁) + // 紧接着关闭ImageReader(销毁Surface,生产者自然停止dequeueBuffer) imageReader?.close() imageReader = null