保留 NSTimer 运行 即使应用程序在 ios 中进入后台
Keep NSTimer running even application goes in background in ios
我想在后台连续执行特定任务,即使我的应用程序进入后台。
这是我试过的代码。计时器进入后台时仅触发一次。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSTimer * timer = [NSTimer timerWithTimeInterval:2.0
target:self
selector:@selector(timerTicked)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer
forMode:NSDefaultRunLoopMode];
}
- (void) timerTicked
{
NSLog(@"Timer method");
}
您不能在后台设置计时器。它可能会工作一小段时间,但如果您没有注册后台模式,您的应用将很快进入睡眠模式。
可用模式可能是:
- 音频
- 位置更新
- 后台获取
- 其他...
查看 Background execution documentation 了解更多信息
- (void)applicationDidEnterBackground:(UIApplication *)application {
UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
bgTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}];
// NotificationTimer its timer
// myMethod1 call ur method
NotificationTimer = [NSTimer scheduledTimerWithTimeInterval: Interval
target: self
selector:@selector(myMethod1)
userInfo: nil repeats:YES];
}
我觉得对你有帮助
我想在后台连续执行特定任务,即使我的应用程序进入后台。
这是我试过的代码。计时器进入后台时仅触发一次。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSTimer * timer = [NSTimer timerWithTimeInterval:2.0
target:self
selector:@selector(timerTicked)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer
forMode:NSDefaultRunLoopMode];
}
- (void) timerTicked
{
NSLog(@"Timer method");
}
您不能在后台设置计时器。它可能会工作一小段时间,但如果您没有注册后台模式,您的应用将很快进入睡眠模式。
可用模式可能是:
- 音频
- 位置更新
- 后台获取
- 其他...
查看 Background execution documentation 了解更多信息
- (void)applicationDidEnterBackground:(UIApplication *)application {
UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
bgTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}];
// NotificationTimer its timer
// myMethod1 call ur method
NotificationTimer = [NSTimer scheduledTimerWithTimeInterval: Interval
target: self
selector:@selector(myMethod1)
userInfo: nil repeats:YES];
}
我觉得对你有帮助