gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 05:02:44 28 4
gpt4 key购买 nike

嘿,我正在开发一个应用程序,我必须在其中每 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 任务创建为本地任务并将其设为全局任务,如下所示:

步骤-1

Initiating varible

步骤-2

ViewDidLoad Method and added barButton

步骤-3

BarButton method call

步骤-4

Timer method call

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

我再次运行演示,这里是它运行的日志。 enter image description here

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

编辑部分:-bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask];//删除这一行,只要计时器正在运行,它就会运行,当应用程序被杀死时,它会自动转储所有变量和范围。 }];

检查它,让我知道它是否有效。

嘿,我运行你的代码,我到达了 expirationHandler 但在释放调试点后,计时器运行平稳。

Highlighted part is when I reached handler

关于ios - 一段时间后 NSTimer 在后台停止触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25658064/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com