waitForPackage,waitForActivity建议添加超时处理

我发现waitForPackage(),waitForActivity()存在不合理问题,没有添加超时处理,如果脚本运行过程中发生情况(应用崩溃,应用闪退,跳转到其他应用,不可预知的提示)会导致函数一直阻塞不在继续。建议软件开发者注意此问题,并在后续版本开发中解决问题。

管理员

你的问题并不是 waitForActivity() 等这两个函数的问题,函数功能就是 等待活动出现,如果你要操作的app出现了异常导致脚本不能运行,那只能说,你自己写的脚本逻辑有问题,不符合你自己的需求,autojs的api文档中已经提供了获取当前活动和当前包名的 API,详情请查看文档 一般全局函数 部分,你的需求,完全可以自己写代码轮询,等待界面出现, 所以还是请多看看文档在提你的问题. 条条大路通罗马,考虑问题不要一根筋.

最后由 DcrClub 编辑
开发者
global.waitForActivity = function(activity, period){
        period = period || 200;
        while(global.currentActivity() != activity){
            sleep(period);
        }
    }

这是这个函数的源码。稍微改一下就好了

此回复已被删除!
开发者

@wwwzzzggg 不要滥用线程

waitForActivity = function(activity, timeout){
       var time = new Date().getTime();
        while(global.currentActivity() != activity){
           if(new Date().getTime() - time >= timeout){
                 return false;
            }
            sleep(period);
        }
        return true;
    }

我又修改了一下

function ABwaitForActivity(activity, timeout, period) {
    period = period || 200;
    var time = new Date().getTime();
    while (global.currentActivity() != activity) {
        if (timeout && new Date().getTime() - time >= timeout) {
            return false;
        };
        sleep(period);
    };
    return true;
};

function ABwaitForPackage(packageName, timeout, period) {
    period = period || 200;
    var time = new Date().getTime();
    while (global.currentPackage() != packageName) {
        if (timeout && new Date().getTime() - time >= timeout) {
            return false;
        };
        sleep(period);
    };
    return true;
};
最后由 wwwzzzggg 编辑
  • 6
    帖子
  • 2739
    浏览

与 Auto.js 的连接断开,我们正在尝试重连,请耐心等待