本文簡單介紹Launchers和Choosers的概念,以及它們的區別,簡述各個Launcher和Chooser的功能,並分析它們的行爲。
Launchers和Choosers是爲了統一調用系統提供的服務(程序),讓每個第三方應用程序調用相同系統功能時,保持界面的一致性。
Launchers
啓動器:啓動Windows Phone 7內置應用程序。
包括以下幾個:
EmailComposeTask:啓動發送Email的應用程序。
MediaPlayerLauncher:啓動MeidaPlayer應用程序。
PhoneCallTask:啓動打電話應用程序。
SearchTask:啓動搜索應用程序。
SmsComposeTask:啓動發短信應用程序。
WebBrowserTask:啓動IE。
MarketplaceDetailTask:啓動Marketplace客戶端應用程序,並顯示指定應用的詳細信息。
MarketplaceHubTask:啓動Marketplace客戶端應用程序。
MarketplaceReviewTask:啓動Marketplace客戶端應用程序的審查頁面。
MarketplaceSearchTask:啓動Marketplace客戶端應用程序的搜索頁面。
Choosers
選擇器:調用Windows Phone 7的應用程序選擇所需要的信息(例如照片,電話等)
CameraCaptureTask:啓動照相界面,拍照後返回照片圖像。
EmailAddressChooserTask:啓動選Email地址界面,選擇後返回Email地址。
PhoneNumberChooserTask:啓動電話號碼選擇界面,選擇後返回電話號碼。
PhotoChooserTask:啓動圖片選擇界面,選擇後返回圖像信息。
SaveEmailAddressTask:啓動保存Email地址界面,選擇後返回保存是否成功。
SavePhoneNumberTask:啓動保存電話號碼界面,選擇後返回保存是否成功。
啓動器和選擇器怎樣區別?
啓動器只是負責把相應的應用程序啓動起來就可以了。
選擇器需要將相應的應用程序界面啓動,等待操作結束返回的結果。
Launcher行爲分析
通常情況下,Laucher啓動後,App.xaml.cs中的Application_Deactivated方法被執行,應用程序進入Deactivating狀態;當Launcher操作結束,Application_Activated方法被執行,返回到應用程序,進入Activating狀態。不過PhoneCallTask和MediaPlayerLauncher有些特別。
統計詳見下表:
Application_Deactivated | Application_Activated | 所在頁面的構造函數 | |
EmailComposeTask | 執行 | 執行 | 執行 |
MediaPlayerLauncher | 執行 | 執行 | 不執行 |
PhoneCallTask | 不執行 | 不執行 | 不執行 |
SearchTask | 執行 | 執行 | 執行 |
SmsComposeTask | 執行 | 執行 | 執行 |
WebBrowserTask | 執行 | 執行 | 執行 |
MarketplaceDetailTask | 執行 | 執行 | 執行 |
MarketplaceHubTask | 執行 | 執行 | 執行 |
MarketplaceReviewTask | 執行 | 執行 | 執行 |
MarketplaceSearchTask | 執行 | 執行 | 執行 |
PhoneCallTask彈出的可以視爲是一個MessageBox,只是對程序覆蓋,並未將應用程序切換到後臺,所以都未執行。
MediaPlayerLauncher啓動後,按返回鍵,返回到應用程序所在頁面時,並不執行該頁面的構造函數,其他Launcher卻都執行,沒想明白,誰知道請留言,謝謝!
Chooser行爲分析
通常情況下,Chooser啓動後,
Application_Deactivated | Application_Activated | 所在頁面的構造函數 | |
CameraCaptureTask | 執行 | 執行 | 不執行 |
EmailAddressChooserTask | 執行 | 執行 | 不執行 |
PhoneNumberChooserTask | 執行 | 執行 | 不執行 |
PhotoChooserTask | 執行 | 執行 | 不執行 |
SaveEmailAddressTask | 執行 | 執行 | 執行 |
SavePhoneNumberTask | 執行 | 執行 | 執行 |
從上表可以看出後兩個SaveEmailAddressTask和SavePhoneNumberTask的行爲與前面四個不同,前四個Chooser執行完畢後,自動返回到應用程序調用它的頁面,而這兩個Chooser執行完畢後,不會自動返回,而需要按返回鍵,返回到之前調用它的頁面。
因此如果不在構造函數中創建(new)和Cempleted事件的綁定,後連個Chooser將無法正常工作。
建議將Chooser的創建(new)和Completed事件的綁定操作都放到構造函數中,不要放置到其它位置。
參考文章:
http://msdn.microsoft.com/en-us/library/ff769556(VS.92).aspx
Windows Phone 7 Training Kit for Developers--Lab_LaunchersAndChoosersWP7Lab