我有存儲在應用程序類的數組列表中的視圖模型。所以即使活動因爲旋轉而被破壞,它們的生命期也會繼續(但是一旦isFinishing爲true,那麼視圖模型實例將從列表中移除並停止存在)。在異步調用完成之前按下後退按鈕會發生什麼?
我也有數據服務單例,視圖模型也使用無限期地生活。所以,如果我使用ANKO異步塊在我的視圖模型開始一個異步調用,即
async {
val data = DataService.instance.getData()
uiThread {
if (data != null) {
//do something
}
}
}
如果用戶在調用完成之前按下後退按鈕會發生什麼? IsFinishing將是真實的,我的視圖模型實例將不再存在。請問異步調用異常,當它返回或將它優雅地死亡?
所以我猜這意味着異步{ui {}}應該總是在活動和/或片段上編碼?如果在調用返回之前發生旋轉,uiThread會執行嗎? –
是的,使用uiThread,除非可以獨立於活動/片段保存異步執行的結果。當設備旋轉時,活動被重新創建,所以uiThread中的代碼將不會執行。 – davehenry
請注意,如果您在一個片段中執行此操作,您仍然需要檢查片段是否實際連接,即如果'activity!= null'。這是因爲碎片可能已經分離,但不會收集垃圾。 –