当应用程序处于后台时,NSTimer 的行为是什么?

2023-11-23

我知道当您后台应用程序时,计时器会停止运行。然而,当你从后台回来时,行为是什么?定时器是否保持原来的状态fireDate?

我遇到了一个问题,即从后台返回并设置十分钟后触发的 NSTimer 时,有时我会立即让计时器在之前触发applicationWillEnterForeground:甚至被称为。当它不着火时,并且applicationWillEnterForeground:被调用,我有一些逻辑来通过比较计时器的时间来检查 10 分钟是否已经过去fireDate然而,到当前日期,即使已经过去了 10 分钟,它似乎总是给我一个从当前日期算起的未来约 525 秒的值。

我的理论如下:

  • An NSTimer只要您没有错过预定时间,就会在从后台返回时触发计时器。 (在本例中,我们将计时器安排为 10 分钟,只要您在后台运行 10-20 分钟,它就会在重新进入应用程序时触发。)

  • 如果超过了这个时间,它就不会触发,而是在您返回时为将来的同一时间段安排另一个计时器。 (又名:如果您使用 10 分钟计时器在后台运行了 20 多分钟,那么当您返回时,它会在您返回应用程序后的 10 分钟内安排计时器。)

有人有关于这种行为的任何文档吗?我的理论纯粹基于观察,关于背景时发生的情况的文档要么严重缺乏,要么我无法找到它。


您正确地观察了 NSTimer 的行为方式。

如果您现在创建一个应该每十分钟触发一次的计时器,那么从现在开始它将尝试触发十分钟、20 分钟、30 分钟等。如果应用程序在 1 分钟后进入睡眠状态并在 12 分钟后唤醒,计时器将立即触发,然后在 20 分钟时再次触发(不是计时器触发后 10 分钟,而是原始时间后 20 分钟)。

但是,如果计时器完全错过了一个事件,然后下一个计时器事件也迟到了,假设您在 29 分钟后醒来,则 10 分钟的事件将被删除,20 分钟的事件将尽快被触发(29 分钟后)分钟),30 分钟事件在 30 分钟后触发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当应用程序处于后台时,NSTimer 的行为是什么? 的相关文章

随机推荐

  • SPRING MVC 中的 URL 模式限制

    我的 Spring Web MVC 应用程序在控制器中具有以下处理程序映射 RequestMapping method RequestMethod GET value something 当请求发送至 http www someURL co
  • Linux 排序不适用于负浮点数

    如何对这种输入进行排序 0 00159265291648695254 0 00318530179313823899 0 0 00999983333416666468 0 00362937767285478371 0 004777942590
  • 将数据框的两列转换为命名向量

    我需要转换多行两列data frame到一个命名的字符向量 我的data frame会是这样的 dd data frame crit c a b c d name c Alpha Beta Caesar Doris 我真正需要的是 what
  • 是否可以以编程方式抛出 APPWIDGET_UPDATE 的意图?

    想要我的小部件中的一个按钮来触发小部件类上的 APPWIDGET UPDATE 意图以强制更新 但我没有将 APPWIDGET UPDATE 视为意图中的静态字段 这可能吗 如何做到这一点 Intent intent new Intent
  • 如何更改列表框项目的文本?

    我有一个Listbox充满了项目 我需要更改项目的文本 使用项目配置我只能找到如何更改颜色 如何更改 Tkinter 上的项目文本Listbox 要更改文本 您必须删除并在正确的索引处重新添加项目 这是一个不断更新列表框中第二项的人为示例
  • android studio 错误:无法启动守护进程

    Android Studio 2 2版本 操作系统版本 Windows 10 Java JRE JDK版本 1 8 0 51 错误 无法启动守护进程 这个问题可能是守护进程配置不正确造成的 例如 一个使用了无法识别的 jvm 选项 请参阅用
  • 何时应用数据绑定?

    在对象生命周期的什么时间第一次解析绑定 这是一个简单的问题 但我在书籍和谷歌上都找不到任何信息 其实事情没那么简单 你不会得到这个问题的直接答案 这取决于上下文 这是两个简单的例子 如果有界属性由不在 ControlTemplate 内的
  • 在 Ionic 2 中禁用侧边菜单的滑动打开登录页面(或任何页面)的手势

    我是 Ionic 2 和 Angular2 的新手 我已经使用以下命令下载了新的 Ionic 模板 Ionic start appname sidemenu v2 ts 对于这个特定的解决方案 我添加了一个登录页面来验证用户 验证成功后 用
  • 更改轴而不更改数据 (Python)

    我如何绘制一些数据 删除由该数据创建的轴 然后用不同比例的轴替换它们 假设我有类似的东西 import matplotlib pyplot as plt fig plt figure ax fig add subplot 111 plt x
  • Nginx + (nodejs、socketio、express) + php 站点

    我正在开发一个完全 js HTML5 画布游戏 并希望它是 实时 的 根据我的研究 我发现 Node js 是一个令人兴奋的前景 因此我在我的 ubuntu 12 Web 服务器上使用 socket io express 等配置了它 我是一
  • 如何在 PyCharm 中运行 Flask shell?

    我在 PyCharm 中创建了新的 Flask 项目 但我看不到如何在集成的 PyCharm python 控制台窗口中运行 Flask shell Name app is not defined when start console 我仍
  • 将 RSA 加密参数从 CRT(中国剩余定理)映射到 .NET 格式

    我需要使用 C 实现 RSA 加密 解密 我有一个带有以下参数的私钥 mod n exponent p q dP dQ and p 1mod q 上述参数的解释见中文余数算法 然而 RSA 的 C NET 实现具有不同的参数集 如下所示 M
  • 使用 JavaScript 控制 Flash Player

    我希望能够在与 Flash 组件相同的页面中使用 JavaScript 控制 Flash 电影流 包括 播放和暂停流 改变流 我已经可以加载播放器并设置 flash 参数 但我不知道流开始后如何与播放器交互 是否可以在不修改当前用于播放电影
  • 电子“要求未定义”

    我正在制作一个应用程序 我需要授予对文件系统 fs 模块的访问权限 但是即使使用nodeIntegration启用渲染器给我这个错误 Uncaught ReferenceError require is not defined 我能找到的所
  • Meyers 的单例模式实现线程安全吗?

    以下是使用延迟初始化的实现Singleton 迈耶斯的单例 线程安全吗 static Singleton instance static Singleton s return s 如果不是 为什么以及如何使其线程安全 In C 11 它是线
  • 编辑 UITextField 时如何关闭键盘

    我知道当我想关闭键盘时 我需要告诉我的 UITextField 退出第一响应者 但我不确定如何知道用户何时按下键盘上的 完成 键 有我可以留意的通知吗 我设置了代表UITextField to my ViewController class
  • 多维长度数组反射java

    如何在java上使用反射找到多维数组的长度 多维数组没有 长度 这个概念 它可能不是矩形的 我猜你说的是维数 您需要迭代地深入其中并进行计数 public int getDimensionCount Object array int cou
  • 在SSH.NET中执行长时间命令并在TextBox中连续显示结果

    有没有办法在 Windows 应用程序 如 PuTTY 中执行 Linux 命令并将结果显示在文本框中 例如我正在尝试执行以下命令 wget http centos webpanel com cwp latest sh cwp latest
  • Web API 中的异常处理

    在我的 Web API 项目中 我创建了子项目 类库 在其中处理实际的数据处理操作 我的后端数据库是DocumentDB 我的问题是如何告诉我的 Web API 操作方法我在类库的数据方法中可能遇到的任何错误 一旦我的 Web API 方法
  • 当应用程序处于后台时,NSTimer 的行为是什么?

    我知道当您后台应用程序时 计时器会停止运行 然而 当你从后台回来时 行为是什么 定时器是否保持原来的状态fireDate 我遇到了一个问题 即从后台返回并设置十分钟后触发的 NSTimer 时 有时我会立即让计时器在之前触发applicat