造成不稳定的原因及解决思路

  • 内存泄漏

    • 谨慎定义全局变量,及时释放不用的资源
  • 闪退

    • 给自启动权限、关闭省电优化
  • 无法长时间运行

    • 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");

标签: 暂无标签