【Javscript】如何开发稳定的autojs脚本
造成不稳定的原因及解决思路
内存泄漏
- 谨慎定义全局变量,及时释放不用的资源
闪退
- 给自启动权限、关闭省电优化
无法长时间运行
- adb 连接电脑,电脑端用其他脚本检测运行状态
- 运行一个检测脚本检查脚本运行状态
报错之后无法自动重启
- 运行一个检测脚本重启脚本
稳定的脚本结构
MVC 结构
M-model 模块-负责数据
V-view 视图-负责显示
C-collection 控制器-控制交互行为
common.js 公共函数的文件
fun.js 功能文件 - 一个功能一个文件
main.js 总控文件
// main.js
// 创建本地存储
let storage = storages.create("storages_name");
// 脚本的运行目录
let rootPath = engines.myEngine().cwd();
// 防止脚本二次启动
preventRestart();
// 云控部分代码写在这里
// 判断其他js文件是否正常运行,写在这里
// 使用脚本引擎启动脚本
// 1. 判断是否有功能在运行
engineList = engines.all();
if (engineList.length > 1) {
toastLog("有功能正在启动,请稍后");
exit();
}
// 2.启动脚本
engines.execScriptFile(rootPath + "/" + "fun.js");
// 定时任务
setInterval(() => {
// 检查脚本是否正常运行
engineList = engines.all();
if (engineList.length == 1) {
engines.execScriptFile(rootPath + "/" + "fun.js");
}
}, 1000);
// 功能函数-防止脚本二次启动
function preventRestart() {
let engineList = engines.all();
if (engineList.length > 1) {
let engineId = storage.get("engineId");
for (let i = 0; i < engineList.length; i++) {
if (engineId !== engineList[i].id) {
engineList[i].forceStop();
sleep(5000);
}
}
} else {
storage.put("engineId", engineList[0].id);
}
}
// common.js
let comm = {};
comm.sendText = function () {
// do something
};
module.exports = comm;
// fun.js
let Comm = require("common.js");