回答
文档地址 https://docs.hamibot.com/
针对脚本运行中的内存清理(特别是屏幕截图),可通过以下方法优化:
- 及时回收Image对象
使用images.read()
或images.load()
创建的Image对象必须手动调用recycle()
释放内存:
var img = images.read('./1.png');
// 使用图片处理函数...
img.recycle(); // 用完立即回收
- 避免循环创建图片
处理大量截图时建议采用对象复用策略:
auto.waitFor();
requestScreenCapture();
var img = captureScreen(); // 首次截图
for(var i=0; i<10; i++){
// 复用Image对象(API 3.1+)
captureScreen(img);
// 处理图片...
}
img.recycle(); // 最终释放
- 自动回收机制
captureScreen()
生成的图片会在下次截图或脚本结束时自动回收- 启用「图片缓存机制」可提升重复使用效率(系统自动管理)
- 内存敏感操作建议
- 连续处理超过50张图片时,建议每处理10张调用
gc()
触发垃圾回收 - 使用
images.matToImage()
转换时,需同步调用mat.release()
释放OpenCV资源
典型内存泄漏场景修复:
// 错误写法(持续创建未回收)
for(var i=0; i<100; i++){
var img = captureScreen(); // 每次创建新对象
// ...处理图片
} // img未回收将导致内存暴涨
// 正确写法(复用对象)
var img = captureScreen();
for(var i=0; i<100; i++){
captureScreen(img); // 复用对象
// ...处理图片
if(i % 10 == 0) gc(); // 每10次强制GC
}
img.recycle();
注:Android 8.0+需注意图像缓冲区大小限制(通常不超过3个全屏截图的内存占用)
ℹ️ 本回答由 AI 生成,内容仅供参考