2017-10-17 3 views
0

사용자가 앱을 실행할 때마다 백그라운드 스레드를 통해 콘텐츠의 일부를 색인화하려고합니다. 백그라운드 작업 및 앱 중간에 홈 버튼이 1 번 백그라운드로 이동하면 "신호 9로 종료되었습니다."라는 메시지가 나타납니다. 앱이 포어 그라운드 모드이지만 백그라운드 스레드에서 앱을 크래시하지 않으면 가능한 콘텐츠의 색인을 생성하려고합니다. 내 주된 문제는 응용 프로그램이 배경 스레드에서 실행되는 작업 중간을 죽인 이유입니다. 심지어 작업이 콘솔의 인쇄 문자열 일뿐입니다! 이 시나리오를 어떻게 처리해야합니까?1 번 누를 때 신호 9로 인해 종료 됨 iOS 앱에서 백그라운드 작업 (GCD 사용) 중간에있는 홈 버튼

+0

앱이 CPU 시간이나 메모리를 너무 많이 사용하면 시스템이 시스템을 종료합니다. –

+0

@YunCHEN 예를 들어 320000 단어의 축척으로 색인을 생성 할 때마다 500 단어의 색인을 생성 할 때마다 500 단어의 색인을 생성하여 홈을 누르면 ..... –

+0

색인 생성을위한 소스 코드를 제공합니다. 특정 문제를 발견하거나 성능을 향상시킬 수 있습니다. –

답변

0

당신이 같은 작업 뭔가 함께 할 때 당신은 백그라운드 작업을 시작하고 종료 할 것이

var bgTask: UIBackgroundTaskIdentifier? 

(endBackgroundTask 당신의 객체 속성으로 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() 
} 

추가) 방법

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

자세한 내용은 여기를 참조하십시오.

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

관련 문제