AutoJs6
AutoJs6 copied to clipboard
v6.5.0 captureScreen或ocr.detect 有卡住执行,不返回的情况,以前版本未遇到,更新完6.5.0后,出现多次了
console.log('查找打卡按钮');
i = 0;
outLoop: while (true) {
let src = images.captureScreen();
let results = ocr.detect(src, new android.graphics.Rect(350, 1200, 720, 1610));
for (let el of results) {
if (el.label == '上班打卡' || el.label == '下班打卡') {
click(el.bounds);
sleep(1000);
break outLoop;
}
}
i++;
if (i > 30) {
console.log('未找到打卡按钮');
return false;
}
sleep(500);
}
console.log('找到打卡按钮并点击');
如上述代码,在日志是输出‘查找打卡按钮’后,脚本就卡住不再继续执行了。分析原因应该问题应该是出在captureScreen或ocr.detect上面,此问题不是每次都出现,故面不好确定具体是captureScreen引起的,还是ocr.detect引起的,后续我会在脚本的这两行之间再加调试输出代码检测,也请作者检查下这两个接口是否有其他原因导致不返回的情况.
另外有时候还出现下面的报错,不知道有没有关系
14:17:22.567/E: Failed to allocate a 80 byte allocation with 2475840 free bytes and 2417KB until OOM, target footprint 268435456, growth limit 268435456; giving up on allocation because <1% of heap free after GC.
java.lang.OutOfMemoryError: Failed to allocate a 80 byte allocation with 2475840 free bytes and 2417KB until OOM, target footprint 268435456, growth limit 268435456; giving up on allocation because <1% of heap free after GC.
at org.mozilla.javascript.JavaMembers.reflect(JavaMembers.java:474)
at org.mozilla.javascript.JavaMembers.<init>(JavaMembers.java:63)
at org.mozilla.javascript.JavaMembers_jdk11.<init>(JavaMembers_jdk11.java:18)
at org.mozilla.javascript.JavaMembers.createJavaMembers(JavaMembers.java:843)
at org.mozilla.javascript.JavaMembers.lookupClass(JavaMembers.java:804)
at org.mozilla.javascript.NativeJavaClass.initMembers(NativeJavaClass.java:45)
at org.mozilla.javascript.NativeJavaObject.<init>(NativeJavaObject.java:53)
at org.mozilla.javascript.NativeJavaClass.<init>(NativeJavaClass.java:39)
at org.mozilla.javascript.NativeJavaClass.<init>(NativeJavaClass.java:35)
at org.mozilla.javascript.WrapFactory.wrapJavaClass(WrapFactory.java:136)
at org.mozilla.javascript.NativeJavaPackage.getPkgProperty(NativeJavaPackage.java:115)
at org.mozilla.javascript.NativeJavaPackage.get(NativeJavaPackage.java:72)
at org.mozilla.javascript.ScriptableObject.getProperty(ScriptableObject.java:2024)
at org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1706)
at org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1701)
at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1549)
at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:1051)
at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:87)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:383)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3941)
at org.mozilla.javascript.Context.callFunctionWithContinuations(Context.java:1253)
at org.mozilla.javascript.Context.executeScriptWithContinuations(Context.java:1221)
at org.autojs.autojs.engine.RhinoJavaScriptEngine.init(RhinoJavaScriptEngine.kt:102)
at org.autojs.autojs.engine.LoopBasedJavaScriptEngine.init(LoopBasedJavaScriptEngine.java:112)
at org.autojs.autojs.execution.RunnableScriptExecution.prepare(RunnableScriptExecution.java:65)
at org.autojs.autojs.execution.RunnableScriptExecution.execute(RunnableScriptExecution.java:39)
at org.autojs.autojs.execution.RunnableScriptExecution.execute(RunnableScriptExecution.java:34)
at org.autojs.autojs.execution.RunnableScriptExecution.run(RunnableScriptExecution.java:28)
at java.lang.Thread.run(Thread.java:1012)
14:17:22.570/E: exception on exit: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean org.autojs.autojs.runtime.api.Events.emit(java.lang.String, java.lang.Object[])' on a null object reference
我也是这个问题. 确定是 captureScreen 卡住了. 复现很简单. 做一个死循环,快速 captureScreen(); 防止内存溢出的前提下.可以将结果立即recycel(); 基本上两三次截图就卡住了. 会卡10来秒
确实,我也遇到过多次,使用截图函数就会阻塞,设备iqoo7安卓13