2013-10-10 25 views
3

Xamarin.Mobile組件的最新版本不再採用Android的一些基於任務的API。發行說明在此簡要評論:Xamarin.Mobile:基於任務的API標記爲廢棄

鑑於任務<的脆弱> Android上,由於活動週期的現實基礎API,異步API現在被標記[過時]專爲Android。

可能有人請解釋什麼是脆弱性在這裏是什麼意思?

回答

3

從本質上講,使用跨應用程序生命週期邊界Task是自找麻煩。當相機Activity在Android上啓動時,您實際上正在啓動一個全新的應用程序。您的應用不再在前臺運行,因此Android完全有權關閉您的應用並在相機返回時重新啓動。如果發生這種情況,您的Task實例已被銷燬,因此您永遠不會執行任何awaitContinueWith。這不是一個Task/Android問題,它只是Xamarin.Mobile中的一個設計缺陷。

其結果是,神奇的API被棄用,取而代之的一個利用OnActivityResult的,因爲它是要妥善處理這種情況的唯一途徑。如果您注意到,新的API GetMediaFileExtraAsync仍會返回Task<MediaFile>

(來源:我寫Xamarin.Mobile)。

+0

非常感謝您的解釋!我不知道這個問題是關於跨應用程序的界限。 – yallie

+0

當你說應用生命週期邊界時,你的意思是「更具破壞性」操作,例如調用其他活動以獲取結果,或者調用任何生命週期事件,包括重新定向更改?這似乎有一些混淆:[這裏](http://stackoverflow.com/a/24637838/11683)和[這裏](http://forums.xamarin.com/discussion/comment/34405/#Comment_34405)他們說rotaion是好的,[這裏](http://stackoverflow.com/q/22612775/11683)它看起來並不樂觀,我仍然在努力尋找一個權威性的指南和最佳實踐, OnCreate/OnRestart等 – GSerg

+0

我的實驗顯示屏幕旋轉中斷任何目前'await'ed操作和活動之間的連接,所以我不知道[異步示例](http://components.xamarin.com/gettingstarted/ xamarin.mobile)可以工作,如果他們打算更改UI項目的內容而不是打印到控制檯,並且用戶在執行操作時旋轉了屏幕。 – GSerg

相關問題