美文网首页
react-native 的全局定时器

react-native 的全局定时器

作者: 太平洋_cfd2 | 来源:发表于2024-10-24 10:56 被阅读0次
// 注入方法
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

相关文章

网友评论

      本文标题:react-native 的全局定时器

      本文链接:https://www.haomeiwen.com/subject/zsyjdjtx.html