2011年10月15日 星期六

PhoneApplicationPage Navigation

撰寫 Windows Phone 時的感覺和寫網頁很像…
但開發者對於 PhoneApplicationPage 的存活控制權很低…
就目前為止我還不知道如何使一個 Page 真的解構或得知一個 Page 何時解構…

簡單的將一個 PhoneApplicationPage 在產生到離開會引發的一些 Method 及事件…

Constructor
OnNavigatedTo
OnPageLoaded
OnNavigatingFrom
OnNavigatedFrom
OnPageUnloaded
Destructor

假設撰寫一個簡單的 App 主頁為 N 並可以開啟 P 頁…
N 與 P 頁的瀏灠過程與 Page 產生的流程整理如下…

App 啟動並開啟 N

N.Constructor
N.OnNavigatedTo
N.OnPageLoaded


N 透過 NavigationService 到 P

N.OnNavigatingFrom
P.Constructor
N.OnNavigatedFrom
P.OnNavigatedTo
N.OnPageUnloaded
P.OnPageLoaded


P 透過硬體 Back 鍵回到 N

P.OnNavigatingFrom
P.OnNavigatedFrom
N.OnNavigatedTo
P.OnPageUnloaded
N.OnPageLoaded


在 N 頁使用硬體 Windows 鍵回到 OS

N.OnNavigatingFrom
N.OnNavigatedFrom


OS 透過硬體 Back Key 回 N

N.OnNavigatedTo


N 透過硬體 Back 鍵離開 App

N.OnNavigatingFrom
N.OnNavigatedFrom
P.Destructor
N.Destructor


可以大致歸納出來一些放置流程的目標在哪…
一個簡單的例子…例如某頁在開啟時要做大量的工作…建議放在 OnPageLoad 裡面…
若放在 OnNavigationTo 會導致在該頁中斷回 OS 再 Back 時又觸發一次該工作…
而 Destructor 則是盡量不要放任何重要的流程…因為我們無法預期什麼時侯該物件會解構…
即時性很高的流程就非常適合放在 OnNavigationTo 中進行…
例如根據看到該頁的時間來決定背景是太陽還是月亮等等決策…

沒有留言:

張貼留言