// 注入方法
AppRegistry.registerRunnable('RunableTask', TaskRun);
// 调用
AppRegistry.runApplication('RunableTask', {});
const tasks = new Map();
let currDate = Date.now();
export const TaskRun = () => {
/**
* 初始化
*/
const init = function () {
global.requestAnimationFrame(run);
};
init();
// /**
// * 执行,每秒执行一次
// * 保证秒级工作正确
// */
function run() {
const now = Date.now();
if (now > currDate + 1000) {
currDate = now;
tasks.forEach(item => item.preStart(now));
}
global.requestAnimationFrame(run);
}
};
/**
* 使用方法
*/
// class TrackJob extends Jobs {
// timer = 1000;
// start(now: number) {
// console.log('start======================');
// console.log('我来了', now);
// console.log('end========================');
// }
// }
// addJob('Track', TrackJob);
/**
* 基础工作类
*/
export class Jobs {
name = 'base';
/**
* 下次执行时间戳
*/
nextTime = 0;
/**
* 重载:时间间隔
*/
timer = 0;
/**
* 预启动
*/
preStart(now: number) {
if (this.timer < 1000) return;
if (this.nextTime > now) return;
if (this.nextTime === 0) return (this.nextTime = now + this.timer);
this.nextTime += this.timer;
this.start(now);
}
/**
* 重载:执行一次设置的方法
*/
start(now: number) {}
}
/**
* 添加一个工作
* @param {*} name 名称
* @param {*} time 时间
* @param {*} fn 执行函数
*/
export const addJob = (name: string, Job: any) => tasks.set(name, new Job());
/**
* 取消任务
* @param {*} name
*/
export const cancelJob = (name: string) => tasks.delete(name);
参考:
https://juejin.cn/post/6844903605061812232