一段时间后 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 停止在后台触发 的相关文章

  • 无法在 iOS UIWebView 中加载完整的 Facebook 评论插件

    我有一个简单的ViewController在 UIWebView 中加载 FB 评论插件 implementation ViewController void viewDidLoad super viewDidLoad UIWebView
  • 具有自签名证书的 Alamofire / ServerTrustPolicy

    我想使用 Alamofire 通过带有自签名证书的 https 连接与我的服务器进行通信 我的环境在本地主机上运行 我尝试连接 但响应始终如下所示 Success false Response String nil 我用下面的代码完成了它
  • 由于没有系统应用程序而终止

    这个错误让我发疯 我有一个按钮 我想移动到视图控制器 如果我将其设置为初始视图控制器 我可以打开该视图控制器 但现在我通过单击按钮来调用它 视图控制器包含一个自定义视图 我在绘制矩形上放置了一个断点 当绘制矩形完成时 模拟器终止 我在屏幕上
  • UITableView 无法一直滚动到底部[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只是好奇 我做了一些UITable
  • iOS AVCaptureVideoDataOutput 消耗太多内存

    我在用AVFoundation使用iPhone相机捕获视频的框架 我的代码 self session AVCaptureSession alloc init self output AVCaptureVideoDataOutput allo
  • 自定义 OpenVPN iOS 客户端 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个自定义 iOS OpenVPN 客户端 我找到了这个原生 OpenVPN 客户端核心源码https staging op
  • 解包可选值时意外发现 nil - 使用 ALAMOFIRE

    我正在尝试使用 Alamofire 获取 JSON 格式的数据 当我使用一个 URL 时 它工作正常 当我使用另一个 URL 时 我在解包可选值时收到错误 我似乎无法追踪错误来自哪里 我已采取将代码放入 ViewDidLoad 来跟踪错误
  • 启动使用 Simperium 的应用程序时 objectFromJSONString 崩溃

    我得到了一个JSON当我尝试启动使用 Simperium 框架的应用程序时崩溃 NSCFString objectFromJSONString unrecognized selector sent to instance 0x6c561a0
  • 从 AVAudioRecorder 获取分贝

    我正在尝试从 AVAudio 录音机获取分贝值 这是我目前的代码 我有一个启动录音机的方法 然后是一个读取分贝值的方法 var recorder AVAudioRecorder 全局定义的记录器 然后在此处使用 func init reco
  • 如何读取 Xcode 6.1 Instruments .trace 文件?

    我一直在尝试阅读 trace文件 我使用生成的custom仪器模板 仪器 自动机 分配 Leaks using 仪器 https developer apple com library mac documentation Developer
  • React Native ios运行问题

    我是反应本机和运行新手yarn ios我的 React Native 项目不断失败并出现以下错误 构建失败 以下构建命令失败 编译C Users gift Library Developer Xcode DerivedData gainer
  • swift 中闭包和函数作为参数的区别

    我有将近 4 年的 Objective C 经验 并且是 swift 的新手 我试图从 Objective C 的角度理解 swift 的概念 所以如果我错了 请指导我 在目标 c 中 我们有块 可以稍后异步执行的代码块 这绝对是完全合理的
  • 如何在 Safari 上打开本地 html 文件?

    我想打开本地 html 文件Safari集成到我的Swift 3应用 我知道如何使用网址来做到这一点 这是我用来执行此操作的代码 let encodedString url addingPercentEncoding withAllowed
  • 将 UIRefreshControl 用于 UIWebView

    我在 iOS 6 中看到了 UIRefreshControl 我的问题是是否可以通过下拉来刷新 WebView 而不是像在邮件中那样让它弹出 我使用 rabih 的代码是 WebView UIRefreshControl refreshCo
  • 如何将数据从一个视图传递到下一个视图?

    我正在制作一个下载排队系统来下载视频 处理下载的排队代码位于另一个视图控制器中 现在我的问题是如何将下载的 URL 传递到另一个视图而不推送到另一个视图控制器 如下所示 ViewConntroller View ViewConntrolle
  • 如何将 CIFilter 输出到相机视图?

    我刚刚开始使用 Objective C 我正在尝试创建一个简单的应用程序 它显示带有模糊效果的相机视图 我得到了与 AVFoundation 框架一起使用的相机输出 现在 我正在尝试连接 Core 图像框架 但不知道如何连接 Apple 文
  • 无法识别的选择器调用静态 iOS 库中的类别方法

    我正在使用一些第三方软件来帮助使用 Xcode 4 3 2 编写 iPad 应用程序 该软件是开源的 通常经过设置 因此其代码将与开发人员为应用程序编写的任何代码一起编译 因为我在很多地方使用该软件 所以我决定将其构建为 iOS 模拟器的静
  • 如何避免 NSNumberFormatter 中的四舍五入

    我试图拥有一个最大精度为 2 位小数的数字字符串 而其余小数只是被修剪掉而不是四舍五入 例如 I have 123456 9964 I want 123456 99 gt Just want to trim rest of the deci
  • 如何检测 UISearchBar/UITextField 输入中的暂停?

    我有以下 UISearchbar 代码 void searchBar UISearchBar searchBar textDidChange NSString searchText UIApplication sharedApplicati
  • 防止点击 MKAnnotation 时检测到 MKMapView 上的触摸事件

    我有一个 UITapGestureRecognizer 当用户点击地图时 它将在我的 MKMap 上隐藏和显示工具栏 简单 但是 当用户点击 MKMapAnnotation 时 我不希望地图以正常方式响应点击 如上所述 此外 当用户点击地图

随机推荐

  • 如何使用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 分钟 但之后就不再运行了 我如何修改我的代