繁体   English   中英

防止iOS几分钟后杀死App

[英]Prevent iOS from killing App after a few minutes

我想阻止 iOS 在几分钟后杀死我的应用程序。 我已经在 SO 上阅读了这个线程: 防止 iOS 在 3 分钟后杀死我的应用程序 它说如果我没有超过 3 分钟的后台任务,我的应用程序不会被杀死。 有人可以验证这是真的吗? 因为我的后台任务运行时间不超过 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()

    }

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

  • 将计时器的“结束日期”存储在用户默认值中以与您的小部件共享
  • 当您的应用程序在前台时,使用Timer定期更新您的 UI
  • 当您的小部件显示时,在小部件中使用Timer来定期更新其 UI
  • 当您的应用程序移至后台时,为到期时间安排本地通知
  • 当您的应用返回前台时,如果该通知尚未触发,您可以取消该通知。
  • 在您的应用程序被合法终止的情况下支持应用程序恢复(例如由于内存压力或长时间暂停)

如果你这样做,那么你永远不需要调用beginBackgroundTask 如果您确实调用了beginBackgroundTask并且在进入后台的 3 分钟内没有调用endBackgroundTask ,那么您的应用程序将被终止,即使您没有使用任何 CPU。

简短回答:除非您是逐向导航应用程序或音频播放器,否则您不能运行超过 3 分钟的后台任务。 Apple 设计上不允许这样做。

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

杀死应用程序的不是您的计时器正在执行的操作,而是计时器本身。

您可以阅读Apple 的文档以获取更多信息。

始终尽量避免做任何后台工作,除非这样做可以改善整体用户体验。 应用程序可能会移至后台,因为用户启动了不同的应用程序,或者因为用户锁定了设备并且现在没有使用它。 在这两种情况下,用户都在表示您的应用程序现在不需要做任何有意义的工作。 在这种情况下继续运行只会耗尽设备的电池,并可能导致用户完全强制退出您的应用程序。 因此,请注意您在后台所做的工作,并尽可能避免它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM