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}谢谢,我会再试一次汉克斯,我会再试一次