防止 iOS 在 3 分钟后杀死我的应用程序

Prevent iOS from killing my app after 3 minutes

为了避免实现整个导航堆栈的持久缓存逻辑,我想在后台保留我的应用程序 "alive"(至少 2 小时),因此当用户重新打开应用程序时,它就在其中那是在睡觉之前。

我试过后台任务:

_timerBackgroundTaskId = UIApplication.SharedApplication.BeginBackgroundTask(() =>
{
    // Run some dummy code here. Shouldn´t this prevent the task from actually stopping?
    var remaining = UIApplication.SharedApplication.BackgroundTimeRemaining;
    this.Log().Debug($"Expiration. Remaining: {remaining}. Timer seconds left: {_secondsLeft}");
});
// I´m actually using the timer for something :)
_nsTimer = NSTimer.CreateRepeatingScheduledTimer(TimeSpan.FromSeconds(1), delegate { TimerTick(); });

// later on (after 3 minutes)
UIApplication.SharedApplication.EndBackgroundTask(_timerBackgroundTaskId.Value);

无论我尝试什么,3 分钟后 iOS 都会终止该应用程序。 SO 中的一些答案告诉我们如何使用 fake/silent 背景声音来做到这一点,但我不想给 Apple 评论带来任何麻烦。

有什么建议吗?

事实上,应用程序被杀死是因为我 运行 正在执行一个超过 3 分钟的后台任务,这是限制。 我的问题的解决方案很简单,只需将任务限制在最多 3 分钟即可。

默认情况下 iOS 永远不会终止您的应用程序,除非设备 运行 内存严重不足。

当您 运行 在后台执行某些任务(即:UIApplication.SharedApplication.BeginBackgroundTask)时,仅 应用 3 分钟限制以防止电池耗尽。

如果您在应用程序进入后台之前不启动任何后台任务,该应用程序将始终在那里,并保持状态(我测试了这个等待数小时)。

在我的例子中,我使用后台任务来保持 countdown/alarm 工作。 但我刚刚找到了一种安排本地通知的解决方法。

如果您必须 运行 后台任务,以保持应用程序状态,您有 2 个选项:

  1. 3 分钟前结束任务
  2. 实施恢复策略。 iOS本身提供了一个built-in API 给它。