在后台模式下继续获取数据
Continue getting data in background mode
我正在从服务器获取数据并向用户显示百分比。但是当我点击 phone 主页按钮时(我的意思是我的应用程序处于后台模式。不是杀死它)进程停止。当我再次打开应用程序时,它会继续。
我应该怎么做才能在后台模式下继续获取数据?
据我所知,除非您的应用正在播放音乐或获取位置更新,否则 OS 不会让您的应用在后台无休止地工作。
您可以直接告诉 OS 您的应用程序需要一些时间来结束任务,但通常不会超过一分钟或两分钟。
这里有后台模式的教程,希望对你有帮助...
https://www.raywenderlich.com/5817-background-modes-tutorial-getting-started
确保您已签入后台模式:
您的应用程序 -> 目标:您的应用程序 -> 签名和功能 -> 检查后台模式
在ViewDidLoad()
let app = UIApplication.shared
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillResignActive(notification:)), name: UIApplication.willResignActiveNotification, object: app)
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive(notification:)), name: UIApplication.didBecomeActiveNotification, object: app)
在viewDidLoad下你可以添加这个
@objc func applicationWillResignActive(notification: NSNotification){
print("Entered background")
}
@objc func didBecomeActive(notification: NSNotification){
print("Returned to application")
}
因此在 applicationWillResignActive 中,您可以简单地调用该方法继续阅读。
我希望这是你要找的,否则我会尽量编辑它。
您可以使用以下功能,它会让您的操作运行在后台运行2-3分钟。
var aBackgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid
func registerBackgroundTask() {
aBackgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
self?.endBackgroundTask()
}
assert(callLoggingBackgroundTask != UIBackgroundTaskIdentifier.invalid)
}
func endBackgroundTask() {
print("Background task ended.")
UIApplication.shared.endBackgroundTask(convertToUIBackgroundTaskIdentifier(callLoggingBackgroundTask.rawValue))
aBackgroundTask = UIBackgroundTaskIdentifier.invalid
}
操作开始时调用函数registerBackgroundTask(),操作结束时调用函数endBackgroundTask()。
我正在从服务器获取数据并向用户显示百分比。但是当我点击 phone 主页按钮时(我的意思是我的应用程序处于后台模式。不是杀死它)进程停止。当我再次打开应用程序时,它会继续。 我应该怎么做才能在后台模式下继续获取数据?
据我所知,除非您的应用正在播放音乐或获取位置更新,否则 OS 不会让您的应用在后台无休止地工作。
您可以直接告诉 OS 您的应用程序需要一些时间来结束任务,但通常不会超过一分钟或两分钟。
这里有后台模式的教程,希望对你有帮助...
https://www.raywenderlich.com/5817-background-modes-tutorial-getting-started
确保您已签入后台模式:
您的应用程序 -> 目标:您的应用程序 -> 签名和功能 -> 检查后台模式
在ViewDidLoad()
let app = UIApplication.shared
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillResignActive(notification:)), name: UIApplication.willResignActiveNotification, object: app)
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive(notification:)), name: UIApplication.didBecomeActiveNotification, object: app)
在viewDidLoad下你可以添加这个
@objc func applicationWillResignActive(notification: NSNotification){
print("Entered background")
}
@objc func didBecomeActive(notification: NSNotification){
print("Returned to application")
}
因此在 applicationWillResignActive 中,您可以简单地调用该方法继续阅读。
我希望这是你要找的,否则我会尽量编辑它。
您可以使用以下功能,它会让您的操作运行在后台运行2-3分钟。
var aBackgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid
func registerBackgroundTask() {
aBackgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
self?.endBackgroundTask()
}
assert(callLoggingBackgroundTask != UIBackgroundTaskIdentifier.invalid)
}
func endBackgroundTask() {
print("Background task ended.")
UIApplication.shared.endBackgroundTask(convertToUIBackgroundTaskIdentifier(callLoggingBackgroundTask.rawValue))
aBackgroundTask = UIBackgroundTaskIdentifier.invalid
}
操作开始时调用函数registerBackgroundTask(),操作结束时调用函数endBackgroundTask()。