2011-07-20 17 views
0

アプリがフォアグラウンド状態で来ているすべてのバックグラウンドタスクを停止することができますは、どのように私は自動的に私は次のコードを使用してい

#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は、いくつかの時間後.Butアプリがフォアグラウンドで来る場合、ループを終了する前に終了しても良いのループが含まれていますループが終了するまで黒い画面しか見ることができません。 だから私はすべてのタスクを停止することができますアプリがフォアグラウンド

に来るようどのようにこれは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 

} 

答えて

1

ためのコードである私はあなたの[自己changeCounter】この方法は、なぜあなたの見ているアプリケーションのメインスレッドで実行されていることを考えます操作が終了するまで黒い画面。その操作がメインスレッド上で実行されるのが適切かどうか、またはそれをバックグラウンドスレッドに移動する必要があるかどうかについて考える必要があります。フォアグラウンドに戻ったときに本当にタスクを終了したいのですか、UIがロックされていない限り、タスクが完了するのはいいですか?

+0

はいアプリがアクティブになると、別のタスクがguiで実行されるので、私はそれを殺したいと思う –

+0

[self changeCounter]のコードを投稿 – jaminguy

+0

編集を確認してください –