防止 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 个选项:
- 3 分钟前结束任务
- 实施恢复策略。 iOS本身提供了一个built-in
API 给它。
为了避免实现整个导航堆栈的持久缓存逻辑,我想在后台保留我的应用程序 "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 个选项:
- 3 分钟前结束任务
- 实施恢复策略。 iOS本身提供了一个built-in API 给它。