几分钟后阻止iOS杀死应用

时间:2018-01-30 22:59:49

标签: ios swift background background-task

我想在几分钟后阻止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()

    }

3 个答案:

答案 0 :(得分:3)

您需要构建应用程序,以便它不需要在后台持续执行。据我了解,您的应用程序显示倒计时器,并可以在今日小组件中显示相同的倒计时器。我将使用的方法如下:

  • 存储"结束日期"用户默认为与您的小部件共享的计时器
  • 当您的应用位于前台时,请使用Timer定期更新您的用户界面
  • 当您的Widget显示时,使用窗口小部件中的Timer定期更新其UI
  • 当您的应用移至后台时,请安排有关到期时间的本地通知
  • 当您的应用程序移回前台时,如果尚未解雇,您可以取消该预定通知。
  • 支持应用恢复适用于您的应用合法终止的情况(例如由于内存压力或长时间暂停)

如果您这样做,那么您永远不需要致电beginBackgroundTask。如果您在进入后台后的3分钟内拨打beginBackgroundTask并且不打电话给endBackgroundTask,那么即使您没有使用任何CPU,您的应用也会被终止。

答案 1 :(得分:2)

简短回答:除非你是一个转弯导航应用程序或音频播放器,否则你不能运行超过3分钟的后台任务。 Apple不允许设计它。

答案 2 :(得分:2)

您的后台任务是一个运行时间超过3分钟的计时器。所以你的应用程序被正确杀死了。考虑一下,确认这是Apple的设计。

这不是你的计时器正在执行什么杀死应用程序,它是计时器本身。

您可以阅读Apple's Documentation了解更多信息。

  

始终尽量避免进行任何后台工作,除非这样做可以改善整体用户体验。应用程序可能会移至后台,因为用户启动了其他应用程序,或者因为用户已锁定设备而现在未使用该应用程序。在这两种情况下,用户都发出信号,表示您的应用现在无需进行任何有意义的工作。继续在这种情况下运行只会耗尽设备的电池,并可能导致用户强行退出您的应用程序。所以要注意你在后台做的工作,并尽可能避免它。