auto.js打包后提示不能再ui线程执行阻塞操作,请在子线程或子脚本执行findOne()或untileFind()

本文解决了在使用UI模式进行短视频自动阅读时遇到的UI线程阻塞问题。通过将耗时操作如sleep、waitfor和while等放入子线程执行,有效地避免了UI线程的阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:如题
今日我在写一个短视频自动阅读的时候想把它打包给其他人使用第一次使用了ui,模式出现了如上问题.
解决方案:
后来在搜索引擎的帮助下找到了解决方案,将sleep,waitfor,while 等耗时操作全部写在子线程下.

关于ui线程的阻塞问题可参考这篇博客:

关于ui线程的阻塞问题以及处理方式

### 关于 Auto.js 的功能实现与代码解析 Auto.js 是一款基于 JavaScript 的自动化工具,主要用于 Android 平台上的任务自动化。它提供了丰富的 API 和功能模块来支持开发者完成各种复杂的交互逻辑和脚本编写。 #### 1. **Auto.js 的核心功能** Auto.js 提供了许多强大的功能模块,这些模块可以分为以下几个方面: - **UI 自动化**: 支持模拟点击、滑动、输入等操作,能够通过 `click(x, y)` 者 `text("目标文字").click()` 来控制设备界面[^5]。 - **文件处理**: 可以读取、写入以及管理本地存储中的文件,例如使用 `files.read(path)` 和 `files.write(path, content)` 进行基本的文件 I/O 操作[^6]。 - **网络求**: 借助内置的 HTTP 求库发送 GET/POST 数据包,从而实现与远程服务器的数据交换[^7]。 以下是简单的 UI 自动化示例代码: ```javascript // 找到指定文本并点击 if (text("登录").exists()) { text("登录").findOne().click(); } ``` #### 2. **Auto.js 中的关键概念** ##### a. **事件驱动模型** 类似于 Java 中的 Handler 机制,在 Auto.js 中也存在类似的异步执行方式。`events.register()` 方法用于注册特定类型的监听器,当触发条件满足时自动调用回调函数[^8]。 示例:按键按下检测 ```javascript events.observeKey(); // 开始观察键盘事件 events.onKeyDown("volume_up", function(event) { toastLog("音量加键被按下了!"); }); ``` ##### b. **线程管理** 为了防止长时间运行的任务阻塞线程,可以通过创建子线程的方式分离耗时计算部分。利用 `threads.start(function(){...})` 启动新线程,并在线程间共享变量传递消息[^9]。 #### 3. **常见问题及其解决方案** | 问题描述 | 解决方案 | |----------|-----------| | 脚本崩溃无法定位错误原因 | 使用 try-catch 结构捕获异常并将堆栈信息打印出来便于调试[^10]。<br> ```javascript<br>try {<br> someDangerousOperation();<br>} catch(e) {<br> log(e.stack);<br>}<br>``` | | 定位不到控件元素 | 确认当前页面已加载完毕再查找;适当增加等待时间让视图渲染完全[^11] | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值