Ios 后台线程崩溃
当我在后台模式下获取应用程序时,应用程序崩溃,日志如下 这是设备崩溃日志:Ios 后台线程崩溃,ios,swift,grand-central-dispatch,Ios,Swift,Grand Central Dispatch,当我在后台模式下获取应用程序时,应用程序崩溃,日志如下 这是设备崩溃日志: Exception Type: EXC_CRASH (SIGKILL) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Reason: Namespace ASSERTIOND, Code 0x8badf00d Triggered by Thread: 0 F
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace ASSERTIOND, Code 0x8badf00d
Triggered by Thread: 0
Filtered syslog:
None found
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x0000000183563de8 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x0000000183563c60 mach_msg + 72
2 CoreFoundation 0x0000000183aa6e40 __CFRunLoopServiceMachPort + 196
3 CoreFoundation 0x0000000183aa4908 __CFRunLoopRun + 1568
4 CoreFoundation 0x00000001839c4da8 CFRunLoopRunSpecific + 552
5 GraphicsServices 0x00000001859aa020 GSEventRunModal + 100
6 UIKit 0x000000018d9e4758 UIApplicationMain + 236
7 AijouNetto 0x00000001008a851c main + 410908 (AppDelegate.swift:17)
8 libdyld.dylib 0x0000000183455fc0 start + 4
该类实现如下:
class EKNBackgroundTaskManager {
let backgroundDQ = DispatchQueue.global(qos: .background)
var backgroundUpdateTask: UIBackgroundTaskIdentifier!
init(withName: String) {
self.backgroundUpdateTask = UIApplication.shared.beginBackgroundTask(withName: withName) {}
}
func runBackgroundTask(withCode: @escaping (_ cH: @escaping () -> Void) -> Void)
{
backgroundDQ.async {
withCode() {
self.endBackgroungTask()
}
}
}
func endBackgroungTask() {
if backgroundUpdateTask != nil && backgroundUpdateTask != UIBackgroundTaskInvalid {
UIApplication.shared.endBackgroundTask(backgroundUpdateTask)
backgroundUpdateTask = UIBackgroundTaskInvalid
}
}
}
当应用程序处于后台模式时,有什么建议可以修复此错误吗 您的应用程序在后台占用了太多时间,或者启动时间太长,因此被仅在设备上发生的iOS看门狗进程终止。 这可以从终止原因代码中看出。 有关更多信息,请参阅本帖: 您应该检查是开始时间还是后台任务导致了崩溃。如果是启动时间,你必须以某种方式缩短应用程序启动时间。苹果已经就此主题进行了多次演讲,在过去几年的WWDC视频中,可以在苹果开发者平台上找到相应的视频,例如,这一个:
有关长时间运行的后台任务以及如何实现这些任务,请参阅Apple文档:您的应用程序在后台占用了太多时间,或者启动时间太长,因此被iOS看门狗进程终止,仅在设备上发生。 这可以从终止原因代码中看出。 有关更多信息,请参阅本帖: 您应该检查是开始时间还是后台任务导致了崩溃。如果是启动时间,你必须以某种方式缩短应用程序启动时间。苹果已经就此主题进行了多次演讲,在过去几年的WWDC视频中,可以在苹果开发者平台上找到相应的视频,例如,这一个:
有关长时间运行的后台任务以及如何实现这些任务,请参阅Apple文档:Hi,请添加异常断点并用代码where Xcode更新您的帖子paused@Maximelc:此崩溃处于后台模式,调试时不显示崩溃日志。您可以提供一些代码来操作线程吗?也许可以使用GCD Grand Central Dispatch?第17行附近的AppDelegate.swift有助于获得处理此问题的提示DispatchQueue.main.async{self.ResultsPaper=DatabaseManager.shareInstance.GetNewsPaperLast self.resultsNewspaperRegion=DatabaseManager.shareInstance.getNewspaperRegion self.tbvCity.rowHeight=self.view.layer.bounds.size.height/8 self.tbvCity.reloadData self.ColPaper.reloadData}您好,您能添加异常断点并用Xcode代码更新您的帖子吗paused@Maximelc:此崩溃处于后台模式,调试时不显示崩溃日志。您可以提供一些代码来操作线程吗?可能使用GCD Grand Central Dispatch?第17行附近的AppDelegate.swift可用于向fac获取提示e这是issueDispatchQueue.main.async{self.ResultsPaper=DatabaseManager.shareInstance.GetNewsPaperLast self.resultsNewspaperRegion=DatabaseManager.shareInstance.getNewspaperRegion self.tbvCity.rowHeight=self.view.layer.bounds.size.height/8 self.tbvCity.reloadData self.ColPaper.reloadData}谢谢,我会再试一次汉克斯,我会再试一次