① 應用程序的狀態
iOS 應用程序一共有 5 種狀態:
-
Not running:應用未運行
-
Inactive:應用運行在 foreground 但沒有接收事件
-
Active:應用運行在 foreground 且正在接收事件
-
Background:運行在 background 且正在執行代碼
-
Suspended:運行在 background 但沒有執行代碼
② 墓碑機制
墓碑機制(Tombstone)也就是常說的「偽多任務」,是手機操作系統中的一個程序運行規則。
當上一個任務被迫中斷時,如按下 Home 鍵至主界面的瞬間,系統會記錄當下應用程序的狀態,隨后程序被凍結起來(完全掛起),就像把事件記錄在墓碑上一樣。
當需要恢復時,根據墓碑上的內容,將程序恢復到中斷之前的狀態。
這樣的一種機制就是墓碑機制,墓碑機制常見於移動設備這種內存或電能資源有限的平台。
在此機制之上,蘋果也開放了一個后台接口,允許應用在進入后台之后繼續運行10分鍾,無論亮屏還是息屏休眠都是10分鍾,時間一到立馬掛起。
墓碑式后台,在關閉程序時保存現場,下次啟動時還原,給人一種后台的假象。
③ 觸發墓碑化
程序只要符合以下情況之一,就會觸發墓碑化,使得程序掛起:
(1)iOS4.0以前的系統,APP 是基於 iOS4.0 之前系統開發的,設備不支持多任務。
(2)在Info.plist 文件中,程序包含了 UIApplicationExitsOnSuspend 鍵。
(3)系統資源不足時系統調度終止 APP。
④ 真后台
沒錯,iOS 把它稱之為真后台。但與 Android 的后台機制是不一樣的,為了兼顧系統體驗和統一進程管理,iOS 只是給了幾個后台接口:
1、Background Audio 后台音頻
在播放音頻時,即使應用退到后台,只要一直有音頻在播放,那應用就可以一直在后台運行。
2、Location Services 定位服務
這是后台的定位服務,由系統進行統一管理。
3、VoIP 語音通話
一些類似 Skype 通話應用需要調用這個接口,實現后台的語音通話。
4、Newsstand 新聞推送
報刊雜志后台可以主動下載更新,保證其時效性。此后台運行的選項就是提供給報刊雜志類應用可以在后台下載及處理報刊雜志內容,而下載的過程需要使用 NewsstandKit 中的 NKAssetDownload 進行下載。需要注意的是,下載的過程中,應用可能還是會被掛起,甚至應用被退出,而 iOS 會在 Wi-Fi 環境下繼續下載,直到下載完成。
5、Background Task Completion 后台任務凍結
這也就是 iOS4 上面允許后台保留 10 分鍾的那個接口,iOS7 改為允許在開屏下運行 10 分鍾,關屏會暫停,直到開屏后重啟繼續湊足 10 分鍾,直到滿10分鍾后,這個后台就會被凍結。
6、 Remote Notification 遠程推送
iOS7 新增,由統一推送通知激活后台,以往 QQ 微信之類的聊天軟件接收到推送的時候都是點進去再加載數據,而這個接口允許軟件接收到推送后可以直接啟動后台任務。另外還支持Silent Notification(靜默推送),適合實時類強的應用,但有頻率限制(每小時幾次)。
7、Background Transfer Service 后台數據服務
iOS7 新增,可由應用直接激活的無時間限制后台,但是功能很明確,只限於數據的上傳下載這類傳輸服務,且只會在 WiFi 環境下才進行傳輸。
注意:應用被 Background Fetch、Remote Notification、Background Transfer Service 三類喚醒時,只被給予幾秒鍾時間來處理更新。
⑤ 系統統一推送(無后台推送)
說到墓碑機制就不得不說 iOS 的系統推送機制,在應用程序進入墓碑狀態后,其數據仍可通過蘋果搭建的推送服務器傳輸,並不需要應用后台運行,這是無需后台駐留的系統級推送。