墓碑機制


 

墓碑機制與 iOS 應用程序的生命周期 - 陳旭華 - 博客園 https://www.cnblogs.com/chenxuhua/p/12851259.html

墓碑機制與 iOS 應用程序的生命周期

 

① 應用程序的狀態

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 的系統推送機制,在應用程序進入墓碑狀態后,其數據仍可通過蘋果搭建的推送服務器傳輸,並不需要應用后台運行,這是無需后台駐留的系統級推送。

 

 

https://baike.baidu.com/item/墓碑機制

墓碑機制是微軟Windows Phone 7 手機操作系統中的一個程序運行規則。
 
 
中文名
墓碑機制
外文名
Tombstone
發布時間
2014年
硬    件
微軟 Windows Phone 7 手機
缺    陷
WP7卻不支持多任務運行
表    現
游戲的運行狀態等 數據會凍結保存

墓碑機制簡單定義

編輯
 
說簡單點,就是手機上一個任務被迫中斷時(如有電話打入),系統記錄下當前應用程序的狀態后,(像把事件記錄在墓碑上一樣),然后中止程序。當需要恢復時,根據“墓碑”上的內容,將程序恢復到中斷之前的狀態。這樣的一種機制就是“墓碑機制”

墓碑機制具體表現

編輯
 
微軟在2010年發布了全新的Windows Phone 7 手機操作系統,但令人不解的是,WP7卻不支持多任務運行。據了解,WP7並不是嚴格的單任務,比如WP7中微軟自家的IE和ZUNE就能同時運行。
首先來說一些WP7系統程序運行的基本規則, 微軟不允許任何第三方應用程序在WP7的后台運行,特定時間內 只有一個應用程序的在前台運行如果你的應用程序沒有在前台顯示,就表示這些程序並沒有運行,這樣就不耗費 運行內存和處理器資源。這樣做主要是為了延長電池續航時間,並保證響應一致的用戶體驗。
但是所有的WP7手機都將配備返回按鈕硬件,這個按鈕除了有返回導航功能之外,還將支持應用程序之間的切換,比如當你在某個應用程序時點擊了里面的網頁鏈接,然后調用內置瀏覽器進行查看,在查看完畢之后就可以按返回鍵重新返回剛才的程序。
問題就出來了,當前的應用程序切換回之前的應用時,究竟是恢復了一個應用還是重新打開了這個應用呢?因為剛才已經說過了,WP7不允許 后台運行程序,而兩者的區別就是,重新打開時不會保持剛才的使用狀態,恢復是可以延續使用狀態的,這就要說到微軟的 墓碑(Tombstone)機制了。
墓碑是微軟為WP7切換應用程序狀態的一種處理機制,以使用過程為例,當用戶正在使用一個應用程序,比如游戲或者新聞閱讀,這時有電話打進來,來電提示和通話頁面將會在前台顯示,正在運行的游戲就會消失,但是WP7不允許后台運行應用,這時候墓碑機制就會觸發, 游戲的運行狀態包括畫面、進度等等數據會凍結保存,相當於暫停,但是游戲確實沒有運行,這也是墓碑名字的含義:應用程序已經死了,但是墓碑上記錄有臨終前的所有狀態。當通話結束后,游戲操作系統會將應用程序進程重新啟動,並將狀態數據傳遞為應用進行恢復,這也相當於應用從墓地里面爬出來,並按照墓碑上記錄的狀態進行還原。
在程序代碼示例中,微軟給出了單個應用程序的運行 狀態代碼,共有四個App.xaml.cs文件,這些直接關系到執行模式的代碼分別是Application_ Launching、Application_ Activated、Application_ Deactivated、Application_ Closing,分別是啟動、復活(激活程序恢復狀態)、停用(記錄墓碑數據)、關閉(徹底關閉)。開發者們需要注意的是,在開發過程中需要使用微軟給出的工具和相關代碼才能讓自己的應用支持墓碑機制,否則當用戶正在使用的時候突然一個電話過來之后就得再次手動打開程序重頭再來,這會讓用戶非常不爽。
在早期的WP7系統中,微軟並沒有在程序不運行的時候將進程徹底殺死,而是將其暫停,但是這種情況導致了后台運行 堆棧的混亂, API和事件觸發經常會出現問題,所以微軟才決定使用墓碑機制。
不過完全實行墓碑機制將會影響到電話的某些功能,比如短信、 即時通信、天氣等需要時刻保持運行和更新的應用,微軟同樣給出了 推送通知服務(Push Notification Services)的API,允許應用程序調用該接口保持實時更新。

 

 

 

 

 

 

 

 

 

 

墓碑機制簡單定義

編輯
說簡單點,就是手機上一個任務被迫中斷時(如有電話打入),系統記錄下當前應用程序的狀態后,(像把事件記錄在墓碑上一樣),然后中止程序。當需要恢復時,根據“墓碑”上的內容,將程序恢復到中斷之前的狀態。這樣的一種機制就是“墓碑機制”

墓碑機制具體表現

編輯
微軟在2010年發布了全新的Windows Phone 7 手機操作系統,但令人不解的是,WP7卻不支持多任務運行。據了解,WP7並不是嚴格的單任務,比如WP7中微軟自家的IE和ZUNE就能同時運行。
首先來說一些WP7系統程序運行的基本規則, 微軟不允許任何第三方應用程序在WP7的后台運行,特定時間內 只有一個應用程序的在前台運行如果你的應用程序沒有在前台顯示,就表示這些程序並沒有運行,這樣就不耗費 運行內存和處理器資源。這樣做主要是為了延長電池續航時間,並保證響應一致的用戶體驗。
但是所有的WP7手機都將配備返回按鈕硬件,這個按鈕除了有返回導航功能之外,還將支持應用程序之間的切換,比如當你在某個應用程序時點擊了里面的網頁鏈接,然后調用內置瀏覽器進行查看,在查看完畢之后就可以按返回鍵重新返回剛才的程序。
問題就出來了,當前的應用程序切換回之前的應用時,究竟是恢復了一個應用還是重新打開了這個應用呢?因為剛才已經說過了,WP7不允許 后台運行程序,而兩者的區別就是,重新打開時不會保持剛才的使用狀態,恢復是可以延續使用狀態的,這就要說到微軟的 墓碑(Tombstone)機制了。
墓碑是微軟為WP7切換應用程序狀態的一種處理機制,以使用過程為例,當用戶正在使用一個應用程序,比如游戲或者新聞閱讀,這時有電話打進來,來電提示和通話頁面將會在前台顯示,正在運行的游戲就會消失,但是WP7不允許后台運行應用,這時候墓碑機制就會觸發, 游戲的運行狀態包括畫面、進度等等數據會凍結保存,相當於暫停,但是游戲確實沒有運行,這也是墓碑名字的含義:應用程序已經死了,但是墓碑上記錄有臨終前的所有狀態。當通話結束后,游戲操作系統會將應用程序進程重新啟動,並將狀態數據傳遞為應用進行恢復,這也相當於應用從墓地里面爬出來,並按照墓碑上記錄的狀態進行還原。
在程序代碼示例中,微軟給出了單個應用程序的運行 狀態代碼,共有四個App.xaml.cs文件,這些直接關系到執行模式的代碼分別是Application_ Launching、Application_ Activated、Application_ Deactivated、Application_ Closing,分別是啟動、復活(激活程序恢復狀態)、停用(記錄墓碑數據)、關閉(徹底關閉)。開發者們需要注意的是,在開發過程中需要使用微軟給出的工具和相關代碼才能讓自己的應用支持墓碑機制,否則當用戶正在使用的時候突然一個電話過來之后就得再次手動打開程序重頭再來,這會讓用戶非常不爽。
在早期的WP7系統中,微軟並沒有在程序不運行的時候將進程徹底殺死,而是將其暫停,但是這種情況導致了后台運行 堆棧的混亂, API和事件觸發經常會出現問題,所以微軟才決定使用墓碑機制。
不過完全實行墓碑機制將會影響到電話的某些功能,比如短信、 即時通信、天氣等需要時刻保持運行和更新的應用,微軟同樣給出了 推送通知服務(Push Notification Services)的API,允許應用程序調用該接口保持實時更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM