SuperMonster003 / AutoJs6

安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目)
https://docs.autojs6.com
Mozilla Public License 2.0
2.16k stars 653 forks source link

v6.5.0 captureScreen或ocr.detect 有卡住执行,不返回的情况,以前版本未遇到,更新完6.5.0后,出现多次了 #204

Open nsy9601 opened 7 months ago

nsy9601 commented 7 months ago
    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
tmkmk commented 6 months ago

我也是这个问题. 确定是 captureScreen 卡住了. 复现很简单. 做一个死循环,快速 captureScreen(); 防止内存溢出的前提下.可以将结果立即recycel(); 基本上两三次截图就卡住了. 会卡10来秒

sindon123 commented 5 months ago

确实,我也遇到过多次,使用截图函数就会阻塞,设备iqoo7安卓13