脚本运行一段时间后自动停止——后台被杀、内存泄漏与 ANR
先区分「被杀」还是「自己停了」
| 现象 | 原因 |
|---|---|
| 脚本还在但界面刷新了 / 日志停了 | 被系统后台杀掉 |
| 脚本报错后退出 | JS 异常,日志面板能看到 |
| setTimeout / setInterval 不再触发 | 主线程退出,定时器被清理 |
| 通知栏前台服务还在但脚本不跑了 | 脚本逻辑结束或卡死 |
后台被杀的解决方案
1. 必须开前台服务
侧拉菜单 → 前台服务 → 开启。这是基础保障,不开前台服务的 Auto.js 进程在后台就是待宰羔羊。
2. 电池白名单
系统设置 → 电池管理 → 找到 Auto.js → 设为「不限制」或「无限制」。各品牌 ROM 名称不同:
- MIUI:设置 → 应用设置 → 应用管理 → Auto.js → 省电策略
- ColorOS:设置 → 电池 → 应用冻结 → 冻结列表里删掉 Auto.js
- OneUI:设置 → 应用 → Auto.js → 电池 → 不受限制
3. 自启动
设置 → 应用管理 → Auto.js → 自启动 → 开启。这样重启后自动运行。
4. 锁定后台
最近任务界面 → 下拉 Auto.js 卡片 → 出现锁图标。这样系统清理后台时会跳过它。
脚本自身的问题
ANR(Application Not Responding)
主线程长时间阻塞(>5 秒无响应)会触发 ANR,系统会弹窗「Auto.js 未响应」,如果选了「关闭」脚本就停了。
解决:把耗时操作移到子线程:
// ❌ 主线程做网络请求会 ANR
var data = http.get("https://api.example.com/slow-endpoint");
// ✅ 子线程执行
threads.start(function() {
var data = http.get("https://api.example.com/slow-endpoint");
ui.run(function() {
// 回到主线程更新 UI
showResult(data);
});
});
内存泄漏(旧版本问题)
Auto.js Pro 9.2 及以前版本包括免费版,引擎自身存在内存泄漏。长时间运行(几小时以上)会吃掉大量内存,系统不得不杀它。解决:
- 升级到 Pro 9.3+ 或 AutoJs6 最新版
- 长脚本加定时重启(脚本自己跑满 2 小时就 exit,让外部再拉起)
- 每个任务执行完主动清理变量和定时器引用
定时器被清理
主线程结束后 setTimeout / setInterval 会被清理。如果你的脚本结构是:
auto.waitFor();
setInterval(function() { /* ... */ }, 60000);
// 主线程到这里就结束了
定时器可能不会继续跑。解决:主线程保持活跃:
auto.waitFor();
setInterval(function() { /* ... */ }, 60000);
// 保持主线程不退出
events.on("exit", function() {});
while (true) {
sleep(10000); // 主线程心跳
}
极端情况
如果以上都做了还是被杀:
- 考虑把 Auto.js 设为系统应用(需要 Root)
- 用另一台闲置设备专门跑
- 检查是否是目标 APP 反自动化(部分 APP 会主动触发清理)