阻止iOS在3分钟后终止我的应用

时间:2017-02-04 01:16:54

标签: ios xamarin.ios background-process

为了避免实现整个导航堆栈的持久性缓存逻辑,我想让我的应用程序“活着”(至少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中的一些答案告诉我们如何用假/静音背景声音来做,但我不想在Apple评论中遇到任何麻烦。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我的问题的解决方案就像完全没有一样容易。

默认情况下iOS不会杀死你的应用,除非设备运行严重不足。

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

如果你在应用程序进入后台之前没有启动任何后台任务,应用程序将始终在那里,保持状态(我已经测试了这等待了几个小时)。

在我的情况下,我使用后台任务来保持倒计时/闹钟正常工作。 但我刚刚找到了一种安排本地通知的解决方法。

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

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