YYPOST群发软件 发表于 2026-6-19 06:33:53

安卓脚本runTime相关功能示例


安卓脚本runTime相关功能示例




/**
* AIWROK 运行时方法完整演示
* 展示所有 runTime 相关功能的使用方式
*
* 注意:所有方法都通过 runTime 对象调用
*/

// ==================== 全局变量 ====================
var intervalId = null;      // setInterval 的 ID(整数)
var timeoutId = null;       // setTimeout 的 ID(整数)
var executionCount = 0;   // 执行次数计数器
var maxExecutions = 5;      // 最大执行次数

// ==================== 1. Import - 调用执行其他 JS 文件 ====================
/**
* String Import(String arg0)
* 参数: String arg0 - 文件路径,默认调用代码下的文件比如1.js
*       其他路径可以直接写路径地址,但是js文件必须是经过加密的不能加载明文js文件
* 返回值: String
*/
function demoImport() {
    print.log("【演示】Import 调用其他 JS 文件");
   
    try {
      // 示例1:导入默认路径下的加密脚本文件(需要先创建1.js并加密)
      // var result = Import("1.js");
      // print.log("导入结果: " + result);
      
      // 示例2:导入完整路径的加密脚本文件
      // var result2 = Import("/sdcard/AIWROK/encrypted_script.js");
      
      // 示例3:导入获取外网IP的脚本
      Import("获取自己外网IP.js");
      
      print.log("✓ Import 功能演示完成");
      print.log("注意:只能加载加密后的JS文件,不能加载明文JS文件");
    } catch (e) {
      print.log("✗ Import 失败: " + e.message);
    }
}

// ==================== 2. setInterval - 循环执行函数 ====================
/**
* int setInterval(Function arg0, int arg1)
* 参数:
*   Function arg0 - 循环执行的function
*   int arg1 - 间隔时间毫秒(检测时间)
* 返回值: int - 定时器ID,用于clearInterval
*/
function startInterval() {
    print.log("【启动】runTime.setInterval 循环执行");
   
    executionCount = 0;
   
    // 定义要循环执行的函数
    var callback = function() {
      executionCount++;
      print.log("循环执行第 " + executionCount + " 次 - 时间: " + new Date().toLocaleTimeString());
      
      // 达到最大执行次数后自动停止
      if (executionCount >= maxExecutions) {
            stopInterval();
      }
    };
   
    // 启动循环执行,每1000毫秒(1秒)执行一次
    intervalId = runTime.setInterval(callback, 1000);
   
    print.log("✓ setInterval 已启动,ID=" + intervalId + ",间隔1000ms,将执行 " + maxExecutions + " 次");
}

/**
* void clearInterval(int arg0)
* 参数: int arg0 - setInterval返回的定时器ID
* 返回值: void
*/
function stopInterval() {
    if (intervalId !== null) {
      runTime.clearInterval(intervalId);
      print.log("✓ clearInterval(" + intervalId + ") 已停止,共执行 " + executionCount + " 次");
      intervalId = null;
    } else {
      print.log("⚠ setInterval 未运行");
    }
}

// ==================== 3. setTimeout - 异步延迟加载函数 ====================
/**
* int setTimeout(Function arg0, int arg1)
* 参数:
*   Function arg0 - 执行的function
*   int arg1 - 间隔时间毫秒(延迟时间)
* 返回值: int - 定时器ID,用于stopTimeout
*/
function startTimeout() {
    print.log("【启动】runTime.setTimeout 延迟执行");
   
    // 定义延迟后要执行的函数
    var callback = function() {
      print.log("✓ setTimeout 延迟 3 秒后执行完成 - 时间: " + new Date().toLocaleTimeString());
      timeoutId = null;
    };
   
    // 设置延迟执行,3000毫秒(3秒)后执行
    timeoutId = runTime.setTimeout(callback, 3000);
   
    print.log("✓ setTimeout 已设置,ID=" + timeoutId + ",延迟3000ms后执行");
}

/**
* void stopTimeout(int arg0)
* 参数: int arg0 - setTimeout生成的id
* 返回值: void
*/
function stopTimeout() {
    if (timeoutId !== null) {
      runTime.stopTimeout(timeoutId);
      print.log("✓ stopTimeout(" + timeoutId + ") 已取消");
      timeoutId = null;
    } else {
      print.log("⚠ setTimeout 未运行或已执行完毕");
    }
}

// ==================== 4. getObjectPath - 获取当前项目目录 ====================
/**
* String getObjectPath()
* 参数: 无
* 返回值: String - 当前项目目录路径
*/
function demoGetObjectPath() {
    print.log("【演示】runTime.getObjectPath 获取项目目录");
   
    try {
      var projectPath = runTime.getObjectPath();
      print.log("✓ 当前项目目录: " + projectPath);
      
      // 可以用于构建相对路径
      var configPath = projectPath + "/config.json";
      print.log("配置文件路径: " + configPath);
      
    } catch (e) {
      print.log("✗ 获取项目目录失败: " + e.message);
    }
}

// ==================== 5. restart - 重启应用 ====================
/**
* void restart()
* 参数: 无
* 返回值: void
* 说明: 重启应用,需要3秒
*/
function demoRestart() {
    print.log("【警告】runTime.restart 重启应用");
    print.log("应用将在 3 秒后重启...");
   
    // 实际使用时直接调用即可
    // runTime.restart();
   
    print.log(" 此处仅演示,未实际执行重启(避免中断演示流程)");
    print.log("如需重启,请取消注释 runTime.restart() 调用");
}

// ==================== 6. stopAllRuning - 停止所有运行库 ====================
/**
* void stopAllRuning()
* 参数: 无
* 返回值: void
* 说明: 停止所有后台运行的脚本和线程
*/
function demoStopAllRunning() {
    print.log("【警告】runTime.stopAllRuning 停止所有运行");
   
    // 先停止定时器和延时器
    stopInterval();
    stopTimeout();
   
    print.log("✓ 已停止所有定时任务");
    print.log("⚠ runTime.stopAllRuning() 会停止所有后台运行的脚本和线程");
    print.log("如需停止所有运行,请取消注释 runTime.stopAllRuning() 调用");
   
    // 实际使用时:
    // runTime.stopAllRuning();
}

// ==================== 主演示流程 ====================
function main() {
    print.log("========================================");
    print.log("AIWROK 运行时方法完整演示");
    print.log("========================================");
   
    // 1. 获取项目目录
    demoGetObjectPath();
    sleep.second(秒=2);
   
    // 2. 演示 Import
    demoImport();
    sleep.second(秒=2);
   
    // 3. 启动循环执行
    print.log("----------------------------------------");
    startInterval();
    sleep.second(秒=2);
   
    // 4. 启动延迟执行
    startTimeout();
    sleep.second(秒=2);
   
    // 5. 等待循环执行完成
    print.log("等待循环执行完成...");
    sleep.second(秒=6); // 等待 6 秒让循环执行完毕
    sleep.second(秒=2);
   
    // 6. 演示重启功能(不实际执行)
    print.log("----------------------------------------");
    demoRestart();
    sleep.second(秒=2);
   
    // 7. 演示停止所有运行(不实际执行)
    print.log("----------------------------------------");
    demoStopAllRunning();
    sleep.second(秒=2);
   
    print.log("========================================");
    print.log("演示完成!");
    print.log("========================================");
}

// ==================== 工具函数 ====================

/**
* 手动触发一次循环执行(用于测试)
*/
function triggerInterval() {
    if (intervalId === null) {
      startInterval();
    } else {
      print.log("⚠ setInterval 已在运行中");
    }
}

/**
* 立即停止所有定时任务
*/
function stopAllTasks() {
    stopInterval();
    stopTimeout();
    print.log("✓ 所有定时任务已停止");
}

/**
* 查看当前运行状态
*/
function checkStatus() {
    print.log("【运行状态】");
    print.log("setInterval: " + (intervalId !== null ? "运行中" : "已停止"));
    print.log("setTimeout: " + (timeoutId !== null ? "运行中" : "已停止/已完成"));
    print.log("执行次数: " + executionCount + "/" + maxExecutions);
}

// ==================== 执行入口 ====================
// 自动运行完整演示
main();

// 手动调用各个函数进行测试(可选)
demoGetObjectPath();
triggerInterval();
checkStatus();
stopAllTasks();


页: [1]
查看完整版本: 安卓脚本runTime相关功能示例