簡體   English   中英

防止iOS幾分鍾后殺死App

[英]Prevent iOS from killing App after a few minutes

我想阻止 iOS 在幾分鍾后殺死我的應用程序。 我已經在 SO 上閱讀了這個線程: 防止 iOS 在 3 分鍾后殺死我的應用程序 它說如果我沒有超過 3 分鍾的后台任務,我的應用程序不會被殺死。 有人可以驗證這是真的嗎? 因為我的后台任務運行時間不超過 3 分鍾,即使我的應用程序在此時間之后被殺死。 我的后台任務是一個更新小部件的計時器。 繼承人一些代碼:

self.backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
        self?.endBackgroundTask()
//endBackGroundTask looks like this
UIApplication.shared.endBackgroundTask(self.backgroundTask)
    self.backgroundTask = UIBackgroundTaskInvalid
//
    }
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self,   selector: (#selector(self.updateTimer)), userInfo: nil, repeats: true)

.

// at the beginning of the class
var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid

.

// in viewWillDisappear
self.timer.invalidate()
    if self.backgroundTask != UIBackgroundTaskInvalid {
        self.endBackgroundTask()

    }

您需要構建您的應用程序,使其不需要在后台持續執行。 據我了解,您的應用程序顯示倒計時計時器,並且可以在“今日”小部件中顯示相同的倒計時計時器。 我將使用的方法如下:

  • 將計時器的“結束日期”存儲在用戶默認值中以與您的小部件共享
  • 當您的應用程序在前台時,使用Timer定期更新您的 UI
  • 當您的小部件顯示時,在小部件中使用Timer來定期更新其 UI
  • 當您的應用程序移至后台時,為到期時間安排本地通知
  • 當您的應用返回前台時,如果該通知尚未觸發,您可以取消該通知。
  • 在您的應用程序被合法終止的情況下支持應用程序恢復(例如由於內存壓力或長時間暫停)

如果你這樣做,那么你永遠不需要調用beginBackgroundTask 如果您確實調用了beginBackgroundTask並且在進入后台的 3 分鍾內沒有調用endBackgroundTask ,那么您的應用程序將被終止,即使您沒有使用任何 CPU。

簡短回答:除非您是逐向導航應用程序或音頻播放器,否則您不能運行超過 3 分鍾的后台任務。 Apple 設計上不允許這樣做。

您的后台任務是一個運行時間超過 3 分鍾的計時器。 所以你的應用程序被正確地殺死了。 考慮確認這是蘋果的設計。

殺死應用程序的不是您的計時器正在執行的操作,而是計時器本身。

您可以閱讀Apple 的文檔以獲取更多信息。

始終盡量避免做任何后台工作,除非這樣做可以改善整體用戶體驗。 應用程序可能會移至后台,因為用戶啟動了不同的應用程序,或者因為用戶鎖定了設備並且現在沒有使用它。 在這兩種情況下,用戶都在表示您的應用程序現在不需要做任何有意義的工作。 在這種情況下繼續運行只會耗盡設備的電池,並可能導致用戶完全強制退出您的應用程序。 因此,請注意您在后台所做的工作,並盡可能避免它。

暫無
暫無

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

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