gpt4 book ai didi

ios - 在 Swift 中使用 UIBackgroundTaskIdentifier 的目的是什么。下面提到的代码将如何执行

转载 作者:行者123 更新时间:2023-11-28 10:03:38 27 4
gpt4 key购买 nike

 self.backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: {
print("animateRightToLeft: went here")
if let indentifier = self.backgroundTaskIdentifier {
print("animateRightToLeft: stop here")
UIApplication.shared.endBackgroundTask(indentifier)
}
})

如果应用程序进入后台,我的应用程序会在一段时间后自动终止。 可以有人建议是因为上面的代码吗?

最佳答案

如果您解释一下您正在尝试做什么,会更容易帮助您吗?您提供的代码将只允许您的应用程序在有限的时间内在后台执行代码(目前在我的 iPhone 7 上为 180 秒)。

详细:调用 beginBackgroundTask 后,您将获得一个计时器,该计时器会在您的应用程序进入后台后开始运行。当该计时器运行时,您的应用程序甚至会在后台执行代码。当此计时器用完或您调用 endBackgroundTask 时,您的代码将停止在后台执行。此外,如果该计时器在您调用 endBackgroundTask 之前用完,您的到期处理程序将被调用,您应该在那里调用 endBackgroundTask。

请注意,您在 expirationHandler 中编写的代码只有在计时器用完之前不调用 endBackgroundTask 时才会被调用。

您可以使用此代码来测试它的所有行为,例如如果按原样运行,即使在后台,应用程序也会在控制台中打印 backgroundTimeRemaining。如果您评论 beginBackgroundTask,您的应用在进入后台后将不会打印任何内容。

private var backgroundTaskIdentifier: UIBackgroundTaskIdentifier?
var timer: Timer?


@IBAction func buttontapped(_ sender: Any)
{
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block:
{
(timer) in

NSLog("$$$$$ Time remaining: \(UIApplication.shared.backgroundTimeRemaining)")
})

self.backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler:
{
NSLog("$$$$$ Timer expired: Your app will not be executing code in background anymore.")

if let indentifier = self.backgroundTaskIdentifier
{
UIApplication.shared.endBackgroundTask(indentifier)
}
})

NSLog("$$$$$ start")
DispatchQueue.main.asyncAfter(deadline:.now() + 30)
{
NSLog("$$$$$ end")
if let indentifier = self.backgroundTaskIdentifier
{
UIApplication.shared.endBackgroundTask(indentifier)
}
}
}

关于ios - 在 Swift 中使用 UIBackgroundTaskIdentifier 的目的是什么。下面提到的代码将如何执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57132305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com