我想在几分钟后阻止iOS杀死我的应用。 我在SO:Prevent iOS from killing my app after 3 minutes上阅读了这个帖子。它说,如果我没有超过3分钟的backgroundtasks我的应用程序不会被杀死。有人可以验证这是真的吗?因为我的后台任务运行时间不超过3分钟,即使我的应用程序在此之后被杀死了。 我的后台任务是一个更新小部件的计时器。下面是一些代码:
self.backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
self?.endBackgroundTask()
//endBackGroundTask looks like this
UIApplication.shared.endBackgroundTask(self.backgroundTask)
self.backgroundTask = UIBackgroundTaskInvalid
//
}
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(self.updateTimer)), userInfo: nil, repeats: true)
// at the beginning of the class
var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
// in viewWillDisappear
self.timer.invalidate()
if self.backgroundTask != UIBackgroundTaskInvalid {
self.endBackgroundTask()
}
答案 0 :(得分:3)
您需要构建应用程序,以便它不需要在后台持续执行。据我了解,您的应用程序显示倒计时器,并可以在今日小组件中显示相同的倒计时器。我将使用的方法如下:
Timer
定期更新您的用户界面Timer
定期更新其UI 如果您这样做,那么您永远不需要致电beginBackgroundTask
。如果您在进入后台后的3分钟内拨打beginBackgroundTask
并且不打电话给endBackgroundTask
,那么即使您没有使用任何CPU,您的应用也会被终止。
答案 1 :(得分:2)
简短回答:除非你是一个转弯导航应用程序或音频播放器,否则你不能运行超过3分钟的后台任务。 Apple不允许设计它。
答案 2 :(得分:2)
您的后台任务是一个运行时间超过3分钟的计时器。所以你的应用程序被正确杀死了。考虑一下,确认这是Apple的设计。
这不是你的计时器正在执行什么杀死应用程序,它是计时器本身。
您可以阅读Apple's Documentation了解更多信息。
始终尽量避免进行任何后台工作,除非这样做可以改善整体用户体验。应用程序可能会移至后台,因为用户启动了其他应用程序,或者因为用户已锁定设备而现在未使用该应用程序。在这两种情况下,用户都发出信号,表示您的应用现在无需进行任何有意义的工作。继续在这种情况下运行只会耗尽设备的电池,并可能导致用户强行退出您的应用程序。所以要注意你在后台做的工作,并尽可能避免它。