一段时间后 NSTimer 停止在后台触发

2024-04-29

嘿,我正在开发一个应用程序,其中我必须每 30 秒调用一次 API,所以我为它创建了 NSTimer。 但是当我的应用程序进入后台时,计时器会在 3-4 分钟后停止触发。所以它只能在后台运行 3-4 分钟,但之后就不再运行了。我如何修改我的代码以使计时器不会停止。

这是我的一些代码。

- (IBAction)didTapStart:(id)sender {
    NSLog(@"hey i m in the timer ..%@",[NSDate date]);
    [objTimer invalidate];
    objTimer=nil;

    UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
    UIApplication  *app = [UIApplication sharedApplication];
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
    }];
    objTimer = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self
                                                       selector:@selector(methodFromTimer) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:objTimer forMode:UITrackingRunLoopMode];
}

-(void)methodFromTimer{
    [LOG debug:@"ViewController.m ::methodFromTimer " Message:[NSString stringWithFormat:@"hey i m from timer ....%@",[NSDate date] ]];
    NSLog(@"hey i m from timer ....%@",[NSDate date]);
}

我什至用以下内容更改了代码:

[[NSRunLoop mainRunLoop] addTimer:objTimer forMode:NSRunLoopCommonModes];

这也行不通。


不要将 UIBackgroundTaskIdentifier 任务创建为本地任务并将其设置为全局任务,如下所示:

Step -1

Step -2

Step -3

Step -4

由于本地范围松散,而全局范围则不然,我创建了一个演示,并使用 1 秒重复计时器运行了一段时间,并且工作顺利。 如果您遇到问题,请告诉我。

I ran again demo and here are logs of it running. enter image description here

所以它工作正常并且超过3分钟。另外,3 分钟的逻辑是正确的,但随着 uibackgroundtask 启动,所以它不应该让它杀死计时器的这个任务。

编辑部分:- bgTask = [应用程序 beginBackgroundTaskWithExpirationHandler:^{ [应用程序结束背景任务:bgTask]; //删除此行,只要计时器正在运行,它就会运行,并且当应用程序被终止时,它的所有 vairbles 和作用域都会自动转储。 }];

检查一下并告诉我是否有效。

嘿,我运行你的代码,并且到达了点过期处理程序,但是在释放调试点之后,计时器运行顺利。

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

一段时间后 NSTimer 停止在后台触发 的相关文章

  • 沙盒尝试恢复消耗性 IAP

    我一直在尝试在 iOS 上测试一些消耗性 IAP 但遇到了一个奇怪的错误 弹出一条警报 其中包含以下文本 此应用内购买已被购买 它将恢复为 自由的 环境 沙盒 我已经检查过 并且确定我的 IAP 可以在 iTunesConnect 中使用
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • 在视图之间传递核心数据实体变量

    我无法理解如何在视图之间使用核心数据实体变量 为了更好地理解我的问题是什么 我的代码如下 View A 基本上 您必须将完整预算实体或相关预算实体的 ID 从视图 A 传递到视图 B 由于不知道您的应用程序的视图层次结构和逻辑 我假设您选择
  • iOS 防止计时器 UILabel 在数字变化时“晃动”

    我有一个UILabel它以以下格式显示计时器的输出MM ss SS 分 秒 厘秒 但是随着厘秒宽度的变化 它从左向右 摇动 例如 11 比 33 窄 有什么办法可以减轻这种情况吗 我尝试过将其居中 给它固定的宽度 但它们似乎没有帮助 从iO
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • iOS 视图控制器内存在被关闭后未释放

    当用户单击按钮时 它会显示一个带有两个视图控制器的新选项卡栏视图控制器 我是这样做的 ACLevelDownloadController dvc ACLevelDownloadController alloc initWithNibName
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • 在 iOS 上使用 Web 服务的最佳方式?

    我想构建一个 iOS 应用程序 让您登录到网络服务 之后 应用程序将 当用户选择时 通过 https 发送登录名 密码以及请求的变量 例如 在请求 新闻更新 后 它将收到 XML 格式的请求信息 类似于
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • Swift Codable 将空 json 解码为 nil 或空对象

    这是我的代码 class LoginUserResponse Codable var result String var data LoginUserResponseData var mess String public class Log
  • Objective-c 中的块递归

    当执行涉及 Objective C 块的递归时 我在 iOS 应用程序中收到 EXC BAD ACCESS 信号 这是简化的代码 void problematicMethod FriendInfo friendInfo onComplete
  • iOS 中的构建对象文件扩展名是什么?

    当我在项目中构建java对象类时 将创建带有 class扩展名的构建文件 并且人类不可读 快速构建文件怎么样 example car java gt build gt car class 构建后会是什么 car swift gt build
  • 如何恢复消耗品应用内购买?

    我正在开发一款 iOS 游戏 用户可以通过应用内消耗品购买一定数量的内部货币 比如 1000 金币 如果用户想将余额从一台设备转移到另一台设备 如何恢复消耗品购买 在苹果的文档中 它说我们必须使用我们自己的服务器 但是如何获取用户的Appl
  • Xcode 中的 iOS 9 警告 - 此文件设置为针对早于项目部署的版本进行构建。功能可能有限

    我刚刚将我的 Mac 更新到最新的操作系统 并将 Xcode 更新到最新版本 现在我收到此警告 但我不知道该由谁来删除它 也不知道它的真正含义是什么 有人可以向我解释一下吗 Thanks Select Main storyboard in
  • SiriKit 错误:此应用程序不支持捐赠意图

    我在 Xcode 10 iOS 12 Beta 中捐赠自定义意图时遇到问题 我创建了一个在我的主应用程序目标和 OrderIntent 目标之间共享的自定义框架 我创建了一个 intentdefinition 文件 并将目标成员资格设置为我
  • 我怎样才能勾勒出文本字体?

    我想在边框 轮廓 中显示另一种颜色的文本 我正在尝试使用在 MapOverlayView 中显示文本 text drawAtPoint CGPointMake 0 30 withFont UIFont fontWithName Helvet
  • iphone:如何停止快门动画?

    我有两个问题 1 我想知道如何在相机加载时停止快门动画 我正在使用 UIImagePickerController 我已经参考了堆栈溢出的许多答案 但没有成功 2 我在相机中有一个自定义按钮 使用cameraOverlayView并想通过单
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 如何反转 CGPath 的点顺序

    我想画一个圆圈 并用它打出字母 为此 我需要顺时针抚摸圆圈 逆时针抚摸字母 这一切都很好 但是当我使用 Core Text 获取字母路径时 我不知道如何从本质上反转该路径 不是镜像或旋转或任何东西 这很简单 我希望点笔画顺序是逆时针的 这实

随机推荐

  • 如何使用rest-api执行spring cloud任务

    我知道可以安排云任务 也可以使用要执行的流进行配置 作为一名开发人员 我想使用 Rest api 执行我的 Spring Cloud 任务 以便我可以按需执行任务 基本上我有一个工作流程管理系统 我们正在使用 control m 代理 所以
  • 如何使用 Gmail API、OAuth2 for Apps 脚本和域范围委派为 G Suite 域中的用户设置电子邮件签名

    这是我之前发布的问题 答案的后续内容 如何使用 Google 电子邮件设置 API 和 OAuth2 for Apps 脚本库为 Google Apps 域中的用户设置电子邮件签名 https stackoverflow com quest
  • 为什么模拟“open”并返回 FileNotFoundError 会引发 AttributeError: __exit__?

    通过模拟测试open with a FileNotFoundError raises AttributeError exit 为什么会发生这种情况以及我可以采取什么措施来解决它 以下代码打开一个简单的文本文件 如果文件丢失 它会生成一个默认
  • 直接从令牌获取 JWT 声明,ASP Net Core 2.1

    我正在开发 ASP Net Core 2 1 Web API 我已经在我的项目中成功实施了 JWT 有了授权一切都可以正常工作 通常 当我需要用户声明时 我知道我可以这样获取它们 例如电子邮件声明 var claimsIdentity Us
  • 解决加载解决方案时 Visual Studio 2008 崩溃的问题

    我已经通过 SVN 下载了 SubSonic 的源代码 当我尝试在 Visual Studio 2008 中打开该项目时 它会转换解决方案 加载所有项目 然后消失 并且不会出现错误消息 解决方案的后续加载也会执行相同的操作 如果我运行 de
  • 将度/分/秒转换为十进制坐标

    在我的代码的一部分中 我将十进制坐标转换为度 分 秒 然后使用 double coord 59 345235 int sec int Math Round coord 3600 int deg sec 3600 sec Math Abs s
  • 如何使用 EF 和数据注释使输入字段仅允许数字?

    我试图弄清楚是否有一种方法可以确保使用数据注释和实体框架仅允许数字输入 我正在使用以下代码 Required DisplayName Client No Column client no TypeName smallint public v
  • 如何在 DirectShow 或 Media Foundation 中拍摄静态照片

    有没有办法使用 DirectShow 或 Media Foundation API 制作照片 静态图像 我的视频捕捉工作正常 我可以捕捉第一帧并收工 但这不是照片 通常相机具有不同的视频和照片模式 其中照片模式可提供更高的分辨率 例如 我有
  • 如何在 html 助手中使用 asp.net mvc 3 razor 执行内联样式

    我想做这个 Html TextBoxFor x gt x BackgroundColor new style width 20px background color Model BackgroundColor 然而它不会渲染我的 Mode
  • 如何从android中的另一个应用程序资源更改主题?

    我知道有一种方法可以通过在 styles xml 中定义并像这样使用它来设置主题 setTheme android R style MyTheme 但是 我想从我开发的另一个应用程序中获取主题 我知道资源名称 实际上我可以使用此代码块获取主
  • Windows EventLog:它的操作速度有多快?

    我有一个服务应用程序 它通过 TCP 处理客户端请求并将任何事件写入 Windows EventLog 由于该应用程序预计会在短时间内为许多客户端和每个客户端的大量请求提供服务 假设每秒 1 到 50 个请求 因此我很想知道密集程度 CPU
  • 快速查询listobject vba的方法

    我使用 Excel 2016 需要从列表对象中获取值 有几列 例如三 我需要获取column1中的值 其中column2 smth column3 smth 我怎样才能快速做到这一点 如果您想要 VBA 中的 SQL 语法和速度 那么您需要
  • 在 Angular 2 中动态更改 DatePipe 的区域设置

    我正在制作一个 Angular 项目 用户可以在其中切换语言 是否可以使语言环境动态化 我看到你可以将它添加到 NgModule 中 但我猜当我把它放在那里时它不是动态的 或者我可以通过服务或其他方式更改它吗 要从服务设置区域设置 您需要添
  • 是否可以从 XML 文件动态更改资源?

    我希望能够轻松更改应用程序的 UI 外观 颜色和徽标 并想询问是否有人对如何最好地做到这一点有任何建议 我想要的只是在编译项目中替换 XML 文件并将资源 即 colors xml 中的颜色值 设置为 XML 的值 唯一的问题似乎是无法在运
  • 在数组中查找距用户位置最近的经度和纬度

    我有一个充满经度和纬度的数组 我的用户位置有两个双变量 我想根据我的阵列测试用户位置之间的距离 看看哪个位置最近 我该怎么做呢 这将得到两个位置之间的距离 但很难理解 我如何针对一系列位置对其进行测试 CLLocation startLoc
  • 使用CSS框架的好处[重复]

    这个问题在这里已经有答案了 可能的重复 最好的 CSS 框架是什么 它们值得付出努力吗 https stackoverflow com questions 203069 what is the best css framework and
  • iTunes connect - 在哪里可以查看 TestFlight 版本的崩溃报告?

    我有一个应用程序正在 iTunes 连接上通过 TestFlight 进行测试 其中一台测试设备不断崩溃 我很确定 itunes connect 上应该有崩溃日志 但我在 testflight 版本中找不到任何崩溃日志 有谁知道在哪里可以找
  • Lambda函数检查特定标签是否不存在-​​python

    我正在尝试以下内容 获取满足以下任一条件的所有 EC2 实例 被标记为标签所有者和值未知或未知 缺少标签所有者 我能够完成 1 但不知道如何实现 2 import boto3 import collections import dateti
  • 如何监听youtube iframe的音量变化?

    Here https stackoverflow com a 17087006 4992248我找到了一个如何收听 YouTube iframe 的 播放 暂停 按钮的示例 player addEventListener onStateCh
  • 一段时间后 NSTimer 停止在后台触发

    嘿 我正在开发一个应用程序 其中我必须每 30 秒调用一次 API 所以我为它创建了 NSTimer 但是当我的应用程序进入后台时 计时器会在 3 4 分钟后停止触发 所以它只能在后台运行 3 4 分钟 但之后就不再运行了 我如何修改我的代