2017-10-17 45 views
0

我想每次用戶運行應用程序時通過後臺線程索引內容的一部分,但當我按1次後臺任務和應用程序中間的主頁按鈕轉到後臺,我收到的消息是:「由於信號9而終止」。 我想索引應用程序處於前景模式時可能的部分內容,但在後臺線程中不會崩潰應用程序。 我的主要問題是爲什麼該應用程序通過在後臺線程中運行的任務中途死亡,即使該任務將只在控制檯中打印字符串! 我應該如何處理這種情況?由於信號9終止,當我按1次在iOS應用程序背景任務(使用GCD)中的主頁按鈕

+0

聽起來應用程序使用太多CPU時間或內存,然後系統將其殺死。 –

+0

@YunCHEN每次我只索引一部分內容,例如在320000字的範圍內,我只索引500字,但通過索引每個500字,當我按Home時,它被殺死。 –

+0

提供索引的源代碼,也許我們可以找到某個問題,或者提高性能。 –

回答

0

你將不得不啓動一個後臺任務並結束它,當你與你的工作,像這樣做

var bgTask: UIBackgroundTaskIdentifier? 

添加bgTask爲你的對象屬性,然後

let application = UIApplication.shared 

bgTask = application.beginBackgroundTask(withName: "name", expirationHandler: { 
    self.endBackgroundTask() 
}) 

DispatchQueue.global(qos: .background).async {[weak self] in 
    //do your stuff here 

    self?.endBackgroundTask() 
} 

添加endBackgroundTask( )方法

func endBackgroundTask() { 
    if bgTask != UIBackgroundTaskInvalid { 
     UIApplication.shared.endBackgroundTask(bgTask!) 
     bgTask = UIBackgroundTaskInvalid 
    } 
} 

您可以在這裏閱讀更多關於

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

相關問題