iOS 先後臺機制以及後臺喚醒機制【我的學習】

iOS 先後臺機制以及後臺喚醒機制

前臺機制

按照蘋果的要求,一個APP在完成相應的操做後,應該及時釋放或中止對硬件或系統功能的控制。好比,一個APP須要根據不一樣的城市顯示不一樣的首頁內容,那麼應該在獲取到手機的當前城市後,主動中止定位。web

後臺機制

iOS的後臺機制共有三種:微信

  • Background Tasks(後臺任務):APP在前臺時啓動某項任務,而後在未結束以前忽然切換到了後臺,那麼APP能夠在切換回調裏使用某些API繼續向系統請求一些時間來繼續完成這個任務;完成以後通知系統,以後系統會將APP掛起。
  • Downloading(下載):在後臺啓動從網絡下載文件的任務。對於文件下載,iOS有專門的機制。
  • Specific Background Tasks(特殊後臺任務):應用須要在後臺一直執行代碼,長時間運行。

先說第一種後臺任務,其實就是一個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,致使耗電量很大:

  • 常見的是在進入後臺時,或在前臺但屏幕熄滅時,未能及時中止某些耗電操做(好比下載和定位),致使耗電。
  • app爲了追求動態化使用了大量web技術,也會致使耗電增大。
  • 後臺存取(後臺應用刷新)過於頻繁,耗電增大。好比在系統設置界面,能夠看到微信有個後臺應用刷新開關,若是打開這個開關,那麼微信在收到新消息推送後,在後臺就能夠更新消息,直接打開微信就能看到了;若是關閉這個開關,收到新消息後,能夠在推送欄看到消息,但打開微信後還須要聯網從新下載完整消息。

另外還有一些軟件,故意鑽空子,利用技術手段做弊,強行運行在後臺,達到某些目的。尤爲在iOS10以前的系統上很常見。


後臺做弊方式

  • 因爲iOS後臺機制的限制,之前要想在後臺運行,能夠申請後臺權限後,模仿音樂播放器,在後臺循環播放一段無聲的音樂,這樣就能夠一直運行在後臺,直到內存不足被系統殺死。
  • 利用後臺存取(後臺應用刷新)功能。正常狀況下,聲明瞭這個類型以後,系統在你的 APP 進入後臺後,間隔性的給機會將你的 APP 喚醒,喚醒後再經過beginBackgroundTaskWithExpirationHandler:向系統申請一段時間,而後再重複申請一段時間,就能夠長時間在後臺運行。並且被殺死後還有可能被系統從新喚醒。

可是,如今iOS10和iOS11以後,這些方法也很難騙過審覈人員和iOS系統的後臺喚醒機制了。

iOS

相關文章
相關標籤/搜索