簡體   English   中英

防止iOS在3分鍾后殺死我的應用

[英]Prevent iOS from killing my app after 3 minutes

為了避免在整個導航堆棧中實現持久的緩存邏輯,我希望即使在后台也可以保持應用程序“活動”(至少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);

無論我如何嘗試,iOS都會在3分鍾后終止該應用程序。 SO中的一些答案說明了如何使用偽造的/無聲的背景聲音來做到這一點,但是我不希望Apple評論有任何麻煩。

有什么建議嗎?

實際上,該應用程序被殺死是因為我運行的后台任務超過了3分鍾,這是極限。 解決我的問題的方法很簡單,只需將任務限制為最多3分鍾即可。

默認情況下,iOS不會殺死您的應用程序 ,除非該設備嚴重耗盡內存。

在您在后台運行某些任務(即UIApplication.SharedApplication.BeginBackgroundTask )時才應用3分鍾的限制,以防止電池耗盡。

如果您沒有在應用程序進入后台之前啟動任何后台任務,則該應用程序將始終保持在該狀態,並保持狀態(我已經測試了此等待時間)。

就我而言,我正在使用后台任務來保持倒數/警報工作。 但是我剛剛發現了一種安排本地通知的解決方法。

如果您必須運行后台任務,要保持應用狀態,您有2個選擇:

  1. 3分鍾前結束任務
  2. 實施恢復策略。 iOS本身為其提供了內置API

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM