Runloop总是导致XPC连接中断



嗨,我会注意到如果我在应用程序后台添加runloop会导致XPC连接中断

例如,我的应用程序连接到BLE设备,如果用户是一段时间以输入背景,我将退出应用程序,而不是发布连接

这是我的代码

func applicationDidEnterBackground(_ application: UIApplication) {
        isInBackground = true
        timer = Timer.scheduledTimer(timeInterval: 300 , target: self, selector: #selector(self.quitApp), userInfo: nil, repeats: false)
        RunLoop.current.add(timer, forMode: .commonModes)
        RunLoop.current.run()
    }
func quitApp() {
    if isInBackground == true {
        print("QUIT APP")
        exit(0)
    }
}
func applicationWillEnterForeground(_ application: UIApplication) {
        timer.invalidate()
        isInBackground = false
}

但是,每当我进入前景时,我都会发现如果我删除

中的runloop
func applicationDidEnterBackground

该应用将运行

func applicationDidBecomeActive 
or 
func applicationWillEnterForeground

但是,如果我添加runloop,它将导致

XPC连接中断

我不明白Runloop和App生命周期之间的关系?

另外,如果我让应用程序输入背景足够的时间,应用程序将退出,而不是再次打开应用程序,一切都很好。

******更新******

这是我使用的最终代码,它可以正常运行,没有崩溃但不确定是因为我是否修改了项目设置...这是很久以前的问题

func applicationDidEnterBackground(_ application: UIApplication) {
    //Quit if Enter background 5 min
    isInBackground = true
    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(quitApp), userInfo: nil, repeats: true)
    timer.fire()
    RunLoop.current.add(timer, forMode: RunLoopMode.commonModes)
    let app = UIApplication.shared
    var bgTask:UIBackgroundTaskIdentifier? = UIBackgroundTaskInvalid
    bgTask = app.beginBackgroundTask{ () -> Void in
        DispatchQueue.main.async{
            if bgTask != UIBackgroundTaskInvalid{
                bgTask = UIBackgroundTaskInvalid
            }
        }
    }
}
func applicationDidBecomeActive(_ application: UIApplication) {
    timer.invalidate()
    isInBackground = false
    backgroundCount = 0
}
@objc func quitApp() {
    if backgroundCount < 300 {
        backgroundCount += 1
    }else {
        if isInBackground == true {
            exit(0)
        }
    }
}

xpc是使用运行循环实现的,因此篡改运行环会中断您的XPC连接也就不足为奇了。

相关内容

  • 没有找到相关文章

最新更新