我正在使用以下代码
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
if ([[UIApplication sharedApplication]
respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)])
{
UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{}];
// Perform work that should be allowed to continue in background
[self changeCounter];
//[NSThread detachNewThreadSelector:@selector(changeCounter) toTarget:self withObject:_viewController];
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}
#endif
changeCounter包含可能在一段时间后结束的循环。但是在结束循环之前如果app进入前景,那么我只能看到黑屏直到循环结束。 那么,当应用程序进入前台时,如何停止所有任务
这是changeCounter的代码
-(void)changeCounter{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
while(back==1.0f){
NSLog(@"loop is runnig");
[NSThread sleepForTimeInterval:1.0];
if(_viewController.minutes<0){
if(_viewController.fadeSeconds>0){
float div=_viewController.deviceVolume/[_viewController.volumeData.fadeTime floatValue];
_viewController.musicPlayer.volume=_viewController.musicPlayer.volume-div;
_viewController.fadeSeconds-=1;
}
else {
[self stop];
//self.musicPlayer.volume=0.0f;
// counter=0;
NSLog(@"closing the sound");
[_viewController.musicPlayer pause];
NSLog(@"fade seconds %i minutes ",_viewController.fadeSeconds);
if(_viewController.dvol==0){
_viewController.musicPlayer.volume=deviceVolume;
_viewController.dvol=1;
}
back=0.0f;
}// end of the else
}
答案 0 :(得分:1)
我认为您的[self changeCounter]方法正在应用程序的主线程上运行,这就是为什么在操作完成之前您会看到黑屏。您应该考虑是否适合在主线程上运行该操作,或者是否应将其移动到后台线程。当你回到前台时,你真的想要杀死任务吗?只要UI没有被锁定,你是否可以完成任务?