直到昨天我确定,NSTimer将在应用程序进入后台后停止。我感觉好像经历了一些异常。
我的应用有更新位置和播放音频背景模式。更新位置每隔几秒刷新一次。但它只发生在其中一个应用程序屏幕上。还有NSTimer刷新了一些UI。
我按照这样安排:
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
还有一种方法,内容与现在无关:
-(void)updateTime
{
//irrelevant content, but the method gets fired even when the app is in background
}
奇怪的是,该方法只能由NSTimer触发,即使在进入后台后,其他地方也会被触发。这里发生了什么?这是正常的行为吗?
答案 0 :(得分:2)
因为你正在使用带有位置和音频的背景模式,你的应用程序在后台仍然存在。所以你的计时器正在运行。
如果您删除了正在使用的位置和音频的背景模式,请尝试使用定时器。
其正常行为。如果我错了,请纠正我。
答案 1 :(得分:1)
将您的计时器设为公开我的意思是将其添加到.h
文件中并在您的应用时访问它。进入后台模式
- (void)applicationDidEnterBackground:(UIApplication *)application
通过上述方法并将您的计时器设置为inValidate
..修复。
如果您想再次启动计时器,则可以通过
访问它- (void)applicationWillEnterForeground:(UIApplication *)application
这种方法。在这里,您需要重新创建计时器。
答案 2 :(得分:1)
您可以使用使计时器无效来停止计时器。
[self.timer invalidate]; self.timer = nil;