按照蘋果的要求,一個APP在完成相應的操做後,應該及時釋放或中止對硬件或系統功能的控制。好比,一個APP須要根據不一樣的城市顯示不一樣的首頁內容,那麼應該在獲取到手機的當前城市後,主動中止定位。web
iOS的後臺機制共有三種:微信
先說第一種後臺任務,其實就是一個APP剛退到後臺時,能夠向系統申請一段時間(通常幾十秒)來處理一些任務,等任務處理完成再被系統掛起。好比一個地圖軟件,下載離線地圖後,正在安裝,用戶此時按了Home鍵,那就能夠向系統申請一段時間等安裝完成後,再掛起。若是耗時超過系統限制,會被強制清理。網絡
第二種後臺下載,必須使用iOS指定的機制才能夠,那就是NSURLSession來建立後臺下載,即便你的APP已經進入後臺,或被系統殺掉了,當下載完成時,系統會喚醒APP來處理下載好的文件。不少雜誌類的應用會有這種功能。app
第三種特殊後臺狀況比較多了:人工智能
1. 須要在後臺播放音頻。如音樂播放。會一直運行; 2. 須要在後臺錄音;會一直運行; 3. 在後臺也須要不斷通知用戶位置變更的;好比導航APP會一直在後臺運行,但地理圍欄APP只會在進入和退出指定位置時喚醒APP; 4. 支持VoIP電話的,如Skype網絡電話;會在有電話時被系統喚醒; 5. 須要在後臺有規律的下載和處理網絡內容的;會在指定時間或網絡條件下被系統喚醒; 6. 在後臺有規律的從其餘外設(第三方配件)獲取並更新數據的;會在收到配件消息時被系統喚醒
還須要注意的是,那些被系統後臺喚醒的app並非無限制的,大部分狀況下被喚醒後只有10秒時間來處理任務,超時未完成處理會被系統強制掛起。設計
iOS爲了控制後臺任務,使用了AI技術,依靠人工智能來判斷一個app應不該該被喚醒,喚醒頻率是多少。已經不是你的app想要喚醒就能喚醒的了,若是手機電量不足或者被喚醒後你的app沒有聯網存取一些數據,或者老是超時被強制結束,那就不會再被喚醒。code
還須要注意的是,絕大多數狀況下,系統不會重啓被用戶手動強制關閉的 APP,但在 iOS 8 以後, location apps (地理圍欄等)是個例外。其餘的全部被用戶手動強制關閉的APP 都不會被系統主動喚起,直到用戶再次主動啓動這個 APP,或者手機重啓並在用戶輸入瞭解鎖密碼以後纔會恢復機制。內存
蘋果對後臺功能要求很嚴格,要求開發能不用後臺就不要用。ci
若是必定要用後臺功能,須要給出說明和解釋,讓審覈人員清楚地知道,app的哪一個功能用到了後臺模式。尤爲是後臺定位功能,由於涉及用戶隱私,審覈很是嚴格。開發
絕大部分軟件是遵照蘋果開發規範的,可是仍是有一些app因爲設計不良或出現bug,致使耗電量很大:
另外還有一些軟件,故意鑽空子,利用技術手段做弊,強行運行在後臺,達到某些目的。尤爲在iOS10以前的系統上很常見。
beginBackgroundTaskWithExpirationHandler:
向系統申請一段時間,而後再重複申請一段時間,就能夠長時間在後臺運行。並且被殺死後還有可能被系統從新喚醒。可是,如今iOS10和iOS11以後,這些方法也很難騙過審覈人員和iOS系統的後臺喚醒機制了。