当前位置: 首页 > article >正文

H5网页嵌在APP内部 手机锁屏后再打开 setInterval会重复执行

H5网页嵌在APP内部 手机锁屏后再打开 setInterval会重复执行

在H5网页嵌入到APP内部时,如果手机锁屏后再打开,可能会遇到setInterval重复执行的问题。这是因为当应用进入后台或屏幕锁定时,浏览器的定时器可能会暂停或重置,导致重新激活时定时器被重新启动。

问题原因
系统休眠:当手机锁屏时,操作系统可能会将应用置于休眠状态,暂停所有活动,包括JavaScript的定时器。
WebView恢复:当用户解锁手机并返回应用时,WebView可能需要重新加载或恢复页面,这会导致setInterval函数重新执行。
解决方法

  1. 使用 visibilitychange 事件
    你可以监听 visibilitychange 事件来检测页面是否可见,并根据页面的可见性来控制 setInterval 的行为。
let intervalId;

function startInterval() {
    if (intervalId) {
        clearInterval(intervalId);
    }
    intervalId = setInterval(() => {
        // 你的定时任务代码
        console.log('定时任务执行');
    }, 1000);
}

function stopInterval() {
    if (intervalId) {
        clearInterval(intervalId);
        intervalId = null;
    }
}

// 监听页面可见性变化
document.addEventListener('visibilitychange', () => {
    if (document.visibilityState === 'visible') {
        startInterval();
    } else {
        stopInterval();
    }
});

// 页面初始加载时启动定时器
if (document.visibilityState === 'visible') {
    startInterval();
}
  1. 使用 pagehide 和 pageshow 事件
    你也可以使用 pagehide 和 pageshow 事件来处理页面隐藏和显示的情况。
let intervalId;

function startInterval() {
    if (intervalId) {
        clearInterval(intervalId);
    }
    intervalId = setInterval(() => {
        // 你的定时任务代码
        console.log('定时任务执行');
    }, 1000);
}

function stopInterval() {
    if (intervalId) {
        clearInterval(intervalId);
        intervalId = null;
    }
}

// 监听页面隐藏和显示
window.addEventListener('pagehide', stopInterval);
window.addEventListener('pageshow', startInterval);

// 页面初始加载时启动定时器
startInterval();

http://www.kler.cn/news/316900.html

相关文章:

  • 【Git原理与使用】版本管理与分支管理(1)
  • LIN总线CAPL函数—— 设置报头同步间隔场长度(linSetBreakLength)
  • Redis数据结构之list列表
  • 116页可编辑PPT全面了解数据治理体系、平台,数据质量数据标准
  • Algo-Lab 2 Stack Queue ADT
  • 重修设计模式-设计原则
  • 图像生成大模型imagen
  • 【STM32 Blue Pill编程】-SPI主机和从机通信(两个STM32之间SPI通信)
  • Git使用详解:从安装到精通
  • 文件服务器FastDFS 消息队列中间件RabbitMQ
  • 快手IP归属地怎么设置别的地方
  • 【栅格地图实现布氏单元分解算法+栅格地图实现牛耕】Boustrophedon Cellular Decomposition Path Planning
  • WINDOWS AGENTARENA:EVALUATING MULTI-MODAL OS AGENTS AT SCALE论文学习
  • C++第六节课 - 拷贝构造函数
  • go语言 数组和切片
  • vue 页面常用图表框架
  • C++ std::find函数 容器元素查找
  • 机器学习-梯度下降实验一
  • 探索味蕾新境界,品味嘴尚绝卤味的健康之旅
  • 摩尔-彭罗斯伪逆(pinv)
  • spring 的启动过程
  • Kotlin 智能类型转换与 when 表达式(八)
  • 828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Redis集群
  • 实战19-详情页UI4等分
  • 浅谈C#之SynchronizationContext
  • Fyne ( go跨平台GUI )中文文档- 架构 (八)完结
  • Openpyxl 插入数据添加数据
  • leetcode 437.路径总和III
  • Gitlab runner的简单使用(一)
  • 【Redis】之Geo