在编写自动化脚本的过程中,定时执行任务是一个极其常见且核心的需求。无论是每日的自动打卡、定时的数据采集,还是周期性的应用巡检,都离不开可靠的定时调度能力。冰狐智能辅助平台为开发者提供了多种实现定时任务的技术路径,涵盖了从简单的单次延迟到复杂的周期性调度,再到无需设备持续待机的硬件级定时方案。
本文将从官方API出发,系统梳理冰狐平台中实现定时任务的全部可行方案,并深入分析各方案的适用场景与注意事项。
一、基于定时器API的实现方案
冰狐智能辅助平台提供了三套独立的定时API,分别对应不同的业务场景:setTimeout用于单次延迟执行,setInterval用于固定间隔循环,setCronTask则支持基于Cron表达式的复杂定点调度。三者底层调度逻辑、生命周期和时间粒度完全不同,开发时需根据业务需求精准选型。
(一)单次延迟定时器:setTimeout
setTimeout用于实现延迟一段时间后执行一次操作,调用后返回定时器唯一ID,可提前调用clearTimeout终止未执行的任务。其参数包括回调函数cb(必填,仅支持全局具名函数)和延迟时长time(必填,单位为毫秒)。以下是一个延迟3秒后执行任务的示例:
function main() { var handler = setTimeout(cbFunc, 3000); } function cbFunc() { console.log('time is coming'); }若需取消尚未执行的定时任务,可使用clearTimeout:
function main() { var handler = setTimeout(cbFunc, 3000); clearTimeout(handler); } function cbFunc() { console.log('time is coming'); }(二)周期循环定时器:setInterval
setInterval用于按固定间隔无限重复执行任务,直到调用clearInterval为止。其参数与setTimeout相同,适合短周期轮询监控等场景。以下示例每3秒执行一次任务:
function main() { var handler = setInterval(cbFunc, 3000); } function cbFunc() { console.log('time is coming'); }在多线程环境下,定时器ID应使用__global修饰符声明为全局变量,并在合适时机主动销毁定时器以释放资源:
var __global handler = null; function main() { handler = setInterval(cbFunc, 3000); } function cbFunc() { console.log('time is coming'); if (null != handler) { clearInterval(handler); handler = null; } }(三)Cron表达式调度器:setCronTask
setCronTask是冰狐平台中最强大的定时调度API,支持精确到分、时、日、月、周的长期定点任务,适合每日、每周、每月固定时刻执行的自动化流程。其参数如下:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cb | function | 必填 | 定时器函数(不支持匿名函数) |
| cron | string | 必填 | Cron表达式,支持cron4j语法 |
| forceRun | boolean | 选填 | 若已有定时任务在运行时是否强制停止后再执行,默认false |
| stopMainTask | boolean | 选填 | 执行前是否停止主任务,默认false |
| exeDefaultTaskWhenFinished | boolean | 选填 | 任务结束后是否执行默认任务,默认false |
以下示例实现每分钟执行一次任务:
function main() { console.log('enter main'); // 每分钟执行一次 setCronTask(cbTask, '* * * * *', false, false, false); } function cbTask() { console.log('do task'); }若需取消Cron调度,可使用clearCronTask并传入调度器ID。
(四)定时API的硬性规范与调试要点
冰狐平台对定时器有三条统一硬性规范:
回调函数仅支持全局具名函数,不支持匿名函数或箭头函数。传入匿名回调会直接触发脚本编译报错,这是移动端脚本引擎的安全限制。
定时器ID需统一存储为全局变量,多线程场景下需添加
__global修饰符。闲置定时器必须主动销毁,以避免资源占用和设备耗电。
此外,一个极易被忽视的重要事项是:脚本编辑页面右上角的"调试执行"按钮无法正常运行定时器逻辑,所有定时相关脚本必须在移动端冰狐APP内点击"执行"按钮才能完整触发定时调度。调试日志可通过网页端日志面板查看console.log输出内容。
二、基于微服务的自动调度方案
除了在移动端脚本中直接使用定时器API,冰狐平台还提供了基于微服务架构的自动调度方案,适用于需要调度大量设备执行任务的场景。该方案通过"移动端业务脚本 + 微服务调用脚本 + Cron表达式调度"三层架构实现定时任务。
具体实现步骤如下:
第一步:编写移动端脚本
编写实现具体业务逻辑的移动端脚本,假设脚本名为task。注意在main函数第一行调用wakeup()函数来唤醒手机屏幕:
function main() { wakeup(); // 执行具体业务任务... }第二步:编写微服务脚本
微服务脚本的唯一目的是调用移动端脚本。通过deviceList()获取设备列表,遍历后使用scriptExe调用指定设备上的移动端脚本:
function main() { var devices = deviceList(); for (var device of devices) { console.log('Found device:' + device.uuid + device.onlineState); if (device.onlineState == 1) { return scriptExe('task', device.uuid, null, true); } } }第三步:配置业务处理服务
在微服务/业务处理中新建一个业务处理服务,选择第二步创建的微服务脚本作为处理脚本。点击"编辑",填写Cron表达式——这是实现自动调度的关键配置。
第四步:设置手机运行环境
启动冰狐APP并置于手机前台,关闭屏幕后插上电源。当自动调度触发时,系统会自动唤醒手机并执行任务。
该方案的优势在于可通过云端统一配置Cron表达式,实现对多台设备的集中调度管理,适合企业级大规模自动化场景。
三、基于手机定时重启的方案
冰狐官方文档指出,使用手机定时重启的方法是最推荐的方式。该方案的核心思路是利用手机系统自带的定时开关机功能,结合冰狐APP的开机自启动能力,实现无需设备持续待机的定时任务执行。
具体步骤如下:
设置手机定时重启:不同品牌手机的设置方法不同,可在系统设置中搜索"定时开关机"或"定时重启"相关选项进行配置。
设置冰狐APP开机自启动:在手机系统设置中,将冰狐智能辅助APP配置为开机自动启动。
设置默认脚本:将要定时执行的任务脚本设置为默认脚本。系统启动后会自动加载并执行默认脚本。优先级规则为:用户默认脚本 < 设备默认脚本。用户默认脚本在「管理中心」/「账户信息」中修改"默认脚本"选项;设备默认脚本在〖移动端〗/〖我的设备〗中点击设备"编辑"按钮修改。
关机等待定时重启:完成配置后将手机关机,系统会在设定的时间自动开机并执行默认脚本。
该方案的最大优势在于手机不需要一直保持待机状态,省电且稳定,因此被官方列为最推荐的方法。
四、方案对比与选型建议
| 方案 | 适用场景 | 优势 | 注意事项 |
|---|---|---|---|
| setTimeout | 单次延迟执行 | 简单直接 | 仅执行一次 |
| setInterval | 短周期轮询 | 固定间隔循环 | 需手动销毁 |
| setCronTask | 复杂定点调度 | 灵活强大的Cron表达式 | 需掌握Cron语法 |
| 微服务调度 | 多设备批量调度 | 云端统一管理 | 需配置业务处理服务 |
| 手机定时重启 | 无需持续待机的定时任务 | 省电、稳定 | 依赖手机系统功能 |
在实际开发中,可根据具体需求选择合适的方案。对于简单的单次延迟或短周期轮询,可直接使用setTimeout或setInterval;对于每日固定时刻的自动化任务(如自动打卡),setCronTask是更优选择;若需调度大量设备,微服务方案更为合适;若希望设备无需持续待机,手机定时重启方案最为省电可靠。
五、运行环境配置要点
无论选择哪种定时方案,稳定的运行环境都是定时任务成功执行的前提。需注意以下几点:
保持冰狐APP在前台:使用定时器API时,手机需将冰狐APP置于前台,最好一直充电并保持屏幕亮着,以防APP被系统杀掉。
开启全部权限:按提示开启存储、网络、悬浮窗、无障碍、后台运行等所有权限。
锁定APP防止后台清理:在手机管家中将冰狐APP锁定,避免内存紧张时被系统清理。
关闭省电模式:在系统设置中关闭省电模式,并将冰狐的后台权限设为"允许后台高耗电"或"不限制"。
开启自启动权限:配置APP开机自启动,保证设备重启后冰狐能正常运行。
通过合理选择定时方案并配置稳定的运行环境,即可在冰狐智能辅助平台中实现可靠、高效的定时任务自动化。