為什么 iOS 系統會頻繁清理后臺?應用被頻繁清理的原因是什么?
那么 iOS 日志記錄里的 Wakeup 是什么?確實不是不是字面意思上的「喚醒」。iOS 日志里記錄的 Wakeup,不是 App 使用意義上的「喚醒」,而是線程級別的「喚醒」。這要如何去理解?
一個放入后臺的 App,當它想要更新地理位置或刷新消息時,它需要被喚醒才能做這些事情,于是它在被放入后臺前,會和系統進行一些約定,比如「我是打車 App,我需要不斷更新地理位置,所以你要常常喚醒我。」然后系統就會去喚醒它了。通常 iOS App 被放入后臺后,只能在有限的條件下被系統喚醒,而不能隨意地自主喚醒進行操作。當我們不想要 App 被后臺喚醒后,主動「殺」掉它基本上就可以達到目的了。
一個 App,不管在前臺或是后臺,在進行具體的任務時,大多都需要用到多線程的模式,比如:為了不阻塞 UI,用一個線程下載內容,下載完成后切換到主線程去更新 UI。這個過程,就是一次 Wakeup。Wakeup 就是線程與線程的通訊,當發生異常情況,不管是 App 代碼或系統層面,頻繁地進行線程喚醒會占用 CPU 資源以及消耗電量。
而造成這一情況的根本原因仍然是 iOS 13 有系統級的 Bug,原本一些合法地讓 App 進入后臺后保持一段時間活躍狀態的這個機制出了 Bug,導致了凡是用到這個機制的 App,都存在不同程度的被頻繁退出的可能。
當然也不能因此就否認有些 App 會采用除系統合法機制之外的讓自己保持活躍狀態的各種 Trick。眾所周知,iOS 13 在隱私和權限方面進一步嚴格了起來,也許 iOS 13 在處理這些 Trick 的時候,沒能處理完美,導致了應用頻繁被退出后臺的現象發生。
點個贊! ()