程式員兩難的關鍵是我們如何維持一個非常靈敏的使用者體驗,同時又要提供一些多任務操作和維護電池壽命。Windows Phone 7提供了當應用程式處于非活動期内使用墓碑機制。本文将讨論Windows Phone 7的多任務、墓碑、這個生命周期。
整個應用程式生命周期是從程式的可執行子產品啟動到終止,目的是在任何時候可提供一個靈敏的系統。這時為了避免倆個以上的應用程式繼續在背景運作,争奪資源,導緻前台應用程式慢和損耗電池壽命。為了做到這一點Windows Phone 7隻允許一個應用程式在前台運作,并不允許第三方應用程式在背景運作,當一個應用程式轉到背景運作後(并沒有關閉),那麼它就是一個墓碑。墓碑意味著應用程式是惰性的,OS依然儲存着該應用程式的狀态資訊。當使用者重新啟動前,進入墓碑狀态,它可以儲存目前狀态,當使用者在此打開時應用程式還在目前。
Navigation
當按下硬體中的傳回按鈕後,你的應用程式就終止了。當你在使用一個應用程式中,又啟動了一個新的應用程式,但是舊的應用程式沒有被關閉,它就處于非活動狀态。但是它将儲存很短的時間,時間一到它就被terminated。
關鍵的差別在于,關閉是當應用程式再被啟動時是建立了一個新的執行個體,以前的狀态沒被儲存,而處于非活動狀态是OS儲存了該應用程式的狀态,不是建立執行個體,并不是真正的終止運作。
手機支援三種造成程式已終止的假象事件
Events are fired on the termination and resumption of an application
開發人員可以使用墓碑事件(tombstone events)來維護應用程式和目前頁面的狀态
當程式再次運作時,開發人員可以使用此狀态來恢複應用程式
當下列任何情況發生後,你的應用程式立即進入墓碑狀态
使用者通過按鍵導航到一個新的應用程式,例如開始鍵
你的應用程式使用了一個launcher或者Chooser來啟動另一個程序
另一方面,如果你啟動了一些為數不多的本地服務,你的應用程式并不進入墓碑狀态,除非新的前台程式需要更多的資源。下列是一些你可啟動的,并不一定是墓碑狀态的服務
· PhotoChooserTask
· CameraCaptureTask
· MediaPlayerLauncher
· EmailAddressChooserTask
· PhoneNumberChooserTask
· Multiplayer Game Invite [games]
· Gamer You Card [games]
生命周期
在應用程式這個生命周期中,狀态間的互相轉換都會觸發一些相關的事件。
這些事件是
Launching /Activating
Running
Deactivating /Closing
所有的這些事件都在Microsoft.Phone.Shell.PhoneApplicationService 類中。
Launching
當使用者點選了應用程式在開始菜單上的層,應用程式就進入啟動狀态,這時, Launching事件就會被觸發。它總是建立一個新的執行個體,是以在處理launching事件上,你不過渡到一個已存在的會話,雖然你隻是檢查獨立存儲上的新執行個體資訊。
Launching是建立新的執行個體,resumed是激活執行個體,兩者是互斥的。
Running
Launching或Activating事件發生應用程式就進入運作狀态。closing or deactivating事件發生就退出運作狀态。
Closing or Deactivating
程式退出運作狀态的;兩種方式
closing說明程式已終止,Deactivating隻是程式停用,它還存在記憶體中。
Activating
處于停用狀态的程式被激活。