为了避免实现整个导航堆栈的持久性缓存逻辑,我想让我的应用程序“活着”(至少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评论中遇到任何麻烦。
有什么建议吗?
答案 0 :(得分:2)
我的问题的解决方案就像完全没有一样容易。
默认情况下iOS不会杀死你的应用,除非设备运行严重不足。
当您在后台运行某项任务时,仅会应用3分钟限制(例如:UIApplication.SharedApplication.BeginBackgroundTask
)以防止电池耗尽。
如果你在应用程序进入后台之前没有启动任何后台任务,应用程序将始终在那里,保持状态(我已经测试了这等待了几个小时)。
在我的情况下,我使用后台任务来保持倒计时/闹钟正常工作。 但我刚刚找到了一种安排本地通知的解决方法。
如果您必须运行后台任务,要保持应用程序状态,您有两个选项: