2014-06-29 37 views
1

當我的應用程序下載大文件和用戶切換到其他應用程序,我正在後臺任務是這樣的:
beginBackgroundTaskWithExpirationHandler:
,然後,如果用戶打開「應用程序切換器」通過雙擊,我的應用程序的截圖是完全隨機的。有時它顯示的視圖控制器甚至沒有在應用程序中打開。iOS7錯誤截圖在應用切換器,而在後臺

ignoreSnapshotOnNextApplicationLaunch沒有幫助,因爲它根本不起作用。

Apple說:Avoid updating your windows and views here:documentation,但我沒有更新視圖。

我也在運行計時器,檢查剩下多少背景時間,而這個計時器是我的問題的原因。如果我沒有創建它,一切工作都很完美,但我無法將下載狀態保存到到期處理程序 - 沒有足夠的時間。
我該如何避免這種奇怪的行爲?

-(void)appDidEnterBackground { 
    UIApplication *application = [UIApplication sharedApplication]; 
    __block UIBackgroundTaskIdentifier bgTask; 
    bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     [application endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

    if(backgroundTimer == nil || ![backgroundTimer isValid]) { 
     backgroundTimer = [[NSTimer alloc] 
       initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0] 
         interval:1 
          target:self 
         selector:@selector(checkBackgroundTimeRemaining) 
         userInfo:nil 
         repeats:YES]; 
     [[NSRunLoop currentRunLoop] addTimer:backgroundTimer forMode:NSRunLoopCommonModes]; 
     [[NSRunLoop currentRunLoop] run]; 
    } 
} 

- (void)checkBackgroundTimeRemaining { 
    NSTimeInterval timeRemaining = [[UIApplication sharedApplication] backgroundTimeRemaining]; 

    if(timeRemaining < 5) { 
     if(backgroundTimer != nil) { 
      [backgroundTimer invalidate]; 
      backgroundTimer = nil; 
     } 
     [downloadTask cancelByProducingResumeData:^(NSData *resumeData) { 
      [self saveResumeData:resumeData]; 
     }]; 
    } 
} 

回答

1

有時它的顯示,這不是即使在應用程序打開的視圖控制器。

這聽起來很腥,不應該發生。也許你可以添加一些代碼來顯示你在做什麼?

ignoreSnapshotOnNextApplicationLaunch在這裏並不重要,因爲它僅用於確定用戶再次點擊圖標以打開應用程序時會發生什麼。

您是否忘了打電話給endBackgroundTask:當您完成後臺任務?

我不確定你打算用這個計時器嗎?如果要確定在後臺執行多少時間,請改爲使用UIApplication的backgroundTimeRemaining。

+0

我已經擺脫了現在的計時器。我正在檢查下載另一部分數據的時間。仍然無法理解計時器如何影響應用切換器的工作。 – trickster77777

+0

應用切換器只顯示您的應用轉到後臺時顯示的最後一個視圖。在後臺讀取時,在應用程序中調用完成處理程序後會捕獲它:performFetchWithCompletionHandler: – camimvogelsang

相關問題