applicationWillTerminate 上的 Swift 后台任务
Posted
技术标签:
【中文标题】applicationWillTerminate 上的 Swift 后台任务【英文标题】:Swift Background task on applicationWillTerminate 【发布时间】:2019-05-25 07:10:37 【问题描述】:我正在使用通话套件和 voip 通话。我遇到过用户正在通话并且用户从后台终止应用程序的情况,然后我想执行一些小操作,例如离开通话频道,保存通话等。
我已经尝试过以下事情,但似乎对我不起作用。
var backgroundTask: UIBackgroundTaskIdentifier = .invalid
func applicationWillTerminate(_ application: UIApplication)
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
// Saves changes in the application's managed object context before the application terminates.
self.saveContext()
if self.status == .inCall
self.backgroundTask = UIApplication.shared.beginBackgroundTask(expirationHandler: [unowned self] in
NSLog("BACKGROUND TIME REMAINING %f", UIApplication.shared.backgroundTimeRemaining)
UIApplication.shared.endBackgroundTask(self.backgroundTask)
self.backgroundTask = .invalid
)
if let topVC = UIApplication.shared.topMostViewController as? CallingController
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: // this line for just testing
topVC.sendText(string: Constants.ChannelMessages.endCall)
DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: // after two seconds leave the channel and save record
topVC.leaveChannelSaveRecord(completion:
AppDelegate.shared.callManager.endCall(call: topVC.call)
// Let's wait for 2 seconds and end background task
// DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute:
UIApplication.shared.endBackgroundTask(self.backgroundTask)
self.backgroundTask = .invalid
// )
)
)
)
我已经启用了关注
任何帮助或建议将不胜感激
提前致谢
【问题讨论】:
这方面有什么更新吗? 【参考方案1】:参考:https://www.raywenderlich.com/5817-background-modes-tutorial-getting-started
启用后台获取功能。
是否进入后台启用keeplive
这是后台模式的解决方案。
【讨论】:
感谢您的回答。抱歉,我认为我的问题不太清楚。我想要的是当应用程序被杀死时我需要一些时间来完成这个过程。而且我已经启用了后台提取以上是关于applicationWillTerminate 上的 Swift 后台任务的主要内容,如果未能解决你的问题,请参考以下文章
“applicationWillTerminate”没有被迅速调用
applicationWillTerminate 何时调用,何时不调用
Swift - 在 applicationWillTerminate 中调用本地通知方法
为啥 UIWebView 不在我的应用程序委托中的 applicationWillTerminate: 处加载 NSURLRequest?