当应用程序在后台时,人们如何处理预定的NSTimer?
假设我每小时在我的应用中更新一些内容.
updateTimer = [NSTimer scheduledTimerWithTimeInterval:60.0*60.0
target:self
selector:@selector(updateStuff)
userInfo:nil
repeats:YES];
Run Code Online (Sandbox Code Playgroud)
在后台时,此计时器显然不会触发(?).当用户回到应用程序时应该怎么办?计时器是否仍然在运行,同一时间?
如果用户在一小时内回来,会发生什么.它会在错过的所有时间触发,还是等到下一次更新时间?
我想要它做的是在应用程序进入前台后立即更新,如果它应该触发的日期是过去的.那可能吗?
我想知道为什么当你在GCD块中创建一个重复计时器时它不起作用?
这很好用:
-(void)viewDidLoad{
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(runTimer) userInfo:nil repeats:YES];
}
-(void)runTimer{
NSLog(@"hi");
}
Run Code Online (Sandbox Code Playgroud)
但这项工作:
dispatch_queue_t myQueue;
-(void)viewDidLoad{
[super viewDidLoad];
myQueue = dispatch_queue_create("someDescription", NULL);
dispatch_async(myQueue, ^{
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(runTimer) userInfo:nil repeats:YES];
});
}
-(void)runTimer{
NSLog(@"hi");
}
Run Code Online (Sandbox Code Playgroud) -(void)viewDidLoad{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[NSTimer scheduledTimerWithTimeInterval:0.10
target:self
selector:@selector(action_Timer)
userInfo:nil
repeats:YES];
}
);
}
-(void)action_Timer{
LOG("Timer called");
}
Run Code Online (Sandbox Code Playgroud)
action_Timer没有被召唤.我不知道为什么.你有什么主意吗?