我正在从服务器获取数据并向用户显示百分比。但是,当我单击“电话回家”按钮时(我的意思是我的应用程序处于后台模式。没有杀死它),过程停止了。当我再次打开应用程序时,它将继续。 我该怎么做才能继续在后台模式下获取数据?
答案 0 :(得分:0)
据我所知,除非您的应用正在播放音乐或进行位置更新,否则操作系统将不会让您的应用在无休止的时间内在后台工作。
您可以告诉操作系统您的应用需要一些时间才能完成任务,但通常两分钟之内,您得到的矿石不会多于一个矿石。
这里有一个有关背景模式的教程,希望对您有帮助...
https://www.raywenderlich.com/5817-background-modes-tutorial-getting-started
答案 1 :(得分:0)
确保您已签入后台模式:
您的应用->目标:您的应用->签名和功能->检查后台模式
在 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 :(得分:0)
您可以使用以下功能,让您的操作在后台运行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()。