6.7.0 - Alpha7 - 修复频繁获取或重建 ImageReader 时可能因缓冲区暂无可用帧导致应用崩溃的问题

This commit is contained in:
SuperMonster003
2025-10-23 23:04:16 +08:00
parent 35fbcbda42
commit 369ceba230
4 changed files with 21 additions and 10 deletions

View File

@@ -1,11 +1,12 @@
{
"$data": {
"v6.7.0": {
"released_date": "2025/10/09",
"released_date": "2025/10/19",
"feature": [
"zip 模块, 用于文件压缩与解压缩操作 (Ref to [Auto.js Pro](https://g.pro.autojs.org/)) (参阅 项目文档 > [Zip](https://docs.autojs6.com/#/zip))",
"mediainfo 模块, 用于查看媒体文件的详细信息 (参阅 项目文档 > [媒体信息](https://docs.autojs6.com/#/mediainfo))",
"UiObject#isShifted 方法, 用于检测控件位置变化",
"s13n.bytes 方法, 用于标准化点对象及时长对象 (参阅 项目文档 > [标准化](https://docs.autojs6.com/#/s13n))",
"structuredClone 全局方法, 用于深拷贝 JavaScript 对象 (参阅 [MDN](https://developer.mozilla.org/zh-CN/docs/Web/API/Window/structuredClone))",
"设置页面支持应用启动器图标设置选项 _[`issue #405`](http://issues.autojs6.com/405)_",
"Scrapers 工具 (run-scrapers.mjs) 用于自动更新 Gradle 构建脚本结构化数据/README 通用数据/README 模板数据等"
@@ -15,6 +16,7 @@
"timers.keepAlive 方法 timeout 参数功能无效的问题",
"floaty.window/rawWindow 方法无法接受字符串参数的问题",
"util.class[Name]/getClass[Name] 可能返回错误结果的问题",
"无法使用 console/toast 等方法显示 BigInt 数据类型的问题",
"部分全局对象可能丢失 JavaScript 原型属性及方法的问题",
"使用 XML 语法将 JavaScript 表达式作为属性值时, this 对象可能出现指向错误的问题",
"canvas 元素控件 setMaxFps 方法内部帧率计算错误",
@@ -24,6 +26,7 @@
"images 部分相关方法可能引发内存泄露的问题 _[`issue #372`](http://issues.autojs6.com/372)_",
"Android 10 UiObject#child 方法可能出现 ArrayIndexOutOfBoundsException 异常的问题 _[`issue #416`](http://issues.autojs6.com/416)_",
"运行项目时 project.json 配置参数无法正常解析的问题",
"频繁获取或重建 ImageReader 时可能因缓冲区暂无可用帧导致应用崩溃的问题",
"打包应用无法正常使用 Paddle OCR 与 Rapid OCR 功能的问题",
"版本历史页面部分系统因字体差别导致统计数据显示不完整的问题",
"部分设备无法正常初始化 MLKit Google OCR 的问题 (试修) _[`issue #8`](http://issues.autojs6.com/8#issuecomment-3117061768)_",

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.media.Image;
import android.media.ImageReader;
@@ -123,7 +124,7 @@ public class ScreenCapturer {
}, mHandler);
}
mVirtualDisplay = mMediaProjection.createVirtualDisplay(ScreenCapturer.class.getSimpleName(), width, height, screenDensity, 16, mImageReader.getSurface(), null, null);
mVirtualDisplay = mMediaProjection.createVirtualDisplay(ScreenCapturer.class.getSimpleName(), width, height, screenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mImageReader.getSurface(), null, null);
}
private void refreshImageReader(int width, int height) {
@@ -167,10 +168,16 @@ public class ScreenCapturer {
}
public void setImageListenerAsync(ImageReader imageReader) {
if (mOnScreenCaptureAvailableListener != null) {
Image acquireLatestImage = imageReader.acquireLatestImage();
mOnScreenCaptureAvailableListener.onCaptureAvailable(acquireLatestImage);
acquireLatestImage.close();
var listener = mOnScreenCaptureAvailableListener;
if (listener == null) return;
try (Image img = imageReader.acquireLatestImage()) {
// acquireLatestImage may return null (no available frames/competition/switching).
// zh-CN: acquireLatestImage 可能返回 null (无可用帧/竞争/切换中).
if (img == null) return;
listener.onCaptureAvailable(img);
} catch (IllegalStateException e) {
// Ignore the current frame if ImageReader/VirtualDisplay is switching or closed.
// zh-CN: 当 ImageReader/VirtualDisplay 正在切换或已关闭时可能抛出, 忽略本帧.
}
}

View File

@@ -24,6 +24,7 @@ public record ScreenCaptureAvailableHandler(ScriptRuntime scriptRuntime, Images.
@Override
public void onCaptureAvailable(Image image) {
if (image == null) return;
Images.setImageCaptureCallback(scriptRuntime, listener, image);
}
}

View File

@@ -1,5 +1,5 @@
#Thu Oct 09 17:46:30 CST 2025
BUILD_TIME=1760003190056
#Thu Oct 23 22:53:43 CST 2025
BUILD_TIME=1761231223404
COMPILE_SDK_VERSION=36
IMAGE_QUANT_CMAKE_VERSION=3.22.1
IMAGE_QUANT_NDK_VERSION=26.1.10909125
@@ -27,6 +27,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13
RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3
TARGET_SDK_VERSION=36
TARGET_SDK_VERSION_INRT=29
VERSION_BUILD=3410
VERSION_NAME=6.7.0 Alpha6
VERSION_BUILD=3434
VERSION_NAME=6.7.0 Alpha7
VSCODE_EXT_REQUIRED_VERSION=1.0.8