iOS 後台執行實現總結

2021-08-01 06:54:30 字數 1690 閱讀 5814

應用的執行狀態分為以下五種:

not running:應用還沒有啟動,或者應用正在執行但是途中被系統停止。

inactive:當前應用正在前台執行,但是並不接收事件(當前或許正在執行其它**)。一般每當應用要從乙個狀態切換到另乙個不同的狀態時,中途過渡會短暫停留在此狀態。唯一在此狀態停留時間比較長的情況是:當使用者鎖屏時,或者系統提示使用者去響應某些(諸如**來電、有未讀簡訊等)事件的時候。

active:當前應用正在前台執行,並且接收事件。這是應用正在前台執行時所處的正常狀態

suspended:應用處在後台,並且已停止執行**。系統自動的將應用移入此狀態,且在此舉之前不會對應用做任何通知。當處在此狀態時,應用依然駐留記憶體但不執行任何程式**。當系統發生低記憶體告警時,系統將會將處於 suspended 狀態的應用清除出記憶體以為正在前台執行的應用提供足夠的記憶體。

background:應用處在後台,並且還在執行**。一般的應用,都只會在這個狀態短暫停留(最多十分鐘),然後就會被系統強制進入 suspended 狀態。而 ios 為了在某些情況下提供更好的體驗,提供了一些選項,只要滿足這些選項的條件,就可以在後台執行很長的一段時間,下面我們將重點討論可以使應用在後台長時間執行的方法。

ios 應用狀態切換示意圖

ios 提供的後台執行方式列表

正在使用麥克風提示

一般用於導航應用中,開啟此選項後,應用退到後台,還可以得到系統的定位更新,從而使得應用可以根據定位的變化做出不同的反應。

**實現可參考:

voip 類的應用允許使用者使用網路而不是手機打**,因此這一類的應用需要保持同它相關的服務的網路連線,用以收到來電事件和其他資料。ios 不是通過一直讓該應用處於啟用狀態來達到這個目的,而是同樣也會將這類的應用掛起,但同時會在應用被掛起期間由系統接管它的 voip 的 socket,當這個 socket 有資料通訊時,系統會再次喚醒處於掛起狀態的應用,同時將 socket 的控制權交還給該應用,以讓其正常的處理來電事件和其他資料。 

此選項提供給一些 mfi 外設通過藍芽,或者 lightning 接頭等方式與 ios 裝置連線,從而可在外設傳送訊息時,喚醒已經被掛起的應用。而一旦被喚醒,一般情況下, 應用只有最多 10 秒鐘的執行時間。

mfi 外設:是指通過蘋果 mfi 認證的裝置,而 mfi 認證是對其授權配件廠商生產的外接配件的一種標識使用許可,是 made for ios 的英文縮寫。

此選項與 external accessory communication 類似,只是此選項無需限制 mfi 外設,而需要的是 bluetooth le 裝置。

此選項是指 ios 裝置作為乙個藍芽外設連線時,對應的應用可以後台執行,但是使用此模式需要使用者進行授權認證。

ios 7 新增加的乙個選項,用於即使在後台,也需要頻繁更新資料的應用。例如乙個 pm2.5 的應用,需要幾個小時更新一次資料,那麼可以開啟此選項,設定乙個時間間隔,從而讓 ios 在間隔時間內在後台啟動該應用,執行指定資料的獲取工作,而此過程最多只能執行 30 秒鐘。

**實現可參考:

iOS常駐後台執行實現

最近重新看ios的開發,確實有一些新的發現 1 短時間常駐 3分鐘 var backgroundtask uibackgroundtaskidentifier nil 申請乙個任務id 該方法在進入後台時響應 如果已存在後台任務,先將其設為完成 if self.backgroundtask nil ...

iOS 後台執行

應用可以在該方法中完成轉入後台前需要做的準備工作,所有的應用需要做以下事情。釋放所有可以釋放的記憶體。儲存使用者資料或狀態資訊,所有沒寫入磁碟的檔案或資訊,在進入後台之前,都應該寫入磁碟,因為程式可能在後台被殺死。當程式進入後台之後,為了確保獲得最佳的使用者體驗,建議釋放那些占用記憶體較大且可以重新...

Ios後台任務執行實現

首先你應該定義如下兩個變數 uibackgroundtaskidentifier m taskid 後台任務id bool m brun 是否有後台任務執行的標誌其次,你需要寫如下幾個函式,用來判斷和啟動後台任務 bool ismultitaskingsupported return bresult...