auto.js 中文文档 下载 App

脚本运行一段时间后自动停止——后台被杀、内存泄漏与 ANR

先区分「被杀」还是「自己停了」

现象原因
脚本还在但界面刷新了 / 日志停了被系统后台杀掉
脚本报错后退出JS 异常,日志面板能看到
setTimeout / setInterval 不再触发主线程退出,定时器被清理
通知栏前台服务还在但脚本不跑了脚本逻辑结束或卡死

后台被杀的解决方案

1. 必须开前台服务

侧拉菜单 → 前台服务 → 开启。这是基础保障,不开前台服务的 Auto.js 进程在后台就是待宰羔羊。

2. 电池白名单

系统设置 → 电池管理 → 找到 Auto.js → 设为「不限制」或「无限制」。各品牌 ROM 名称不同:

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 及以前版本包括免费版,引擎自身存在内存泄漏。长时间运行(几小时以上)会吃掉大量内存,系统不得不杀它。解决:

定时器被清理

主线程结束后 setTimeout / setInterval 会被清理。如果你的脚本结构是:

auto.waitFor();
setInterval(function() { /* ... */ }, 60000);
// 主线程到这里就结束了

定时器可能不会继续跑。解决:主线程保持活跃:

auto.waitFor();
setInterval(function() { /* ... */ }, 60000);

// 保持主线程不退出
events.on("exit", function() {});
while (true) {
  sleep(10000); // 主线程心跳
}

极端情况

如果以上都做了还是被杀:

  1. 考虑把 Auto.js 设为系统应用(需要 Root)
  2. 用另一台闲置设备专门跑
  3. 检查是否是目标 APP 反自动化(部分 APP 会主动触发清理)