0
我有一個TableLayout,在一個ScrollView,它不斷更新由AsyncTask。由的AsyncTaskAndroid如何同步佈局視圖?
我不知道這是否是「合法」到添加/刪除行時,同時用戶可能滾動TableLayout。
如何確保更新不會干擾GUI中的滾動?
或者操作系統照顧這個嗎?
我有一個TableLayout,在一個ScrollView,它不斷更新由AsyncTask。由的AsyncTaskAndroid如何同步佈局視圖?
我不知道這是否是「合法」到添加/刪除行時,同時用戶可能滾動TableLayout。
如何確保更新不會干擾GUI中的滾動?
或者操作系統照顧這個嗎?
在Android上,您的應用程序運行的主線程是唯一可以更新UI的線程。如果您嘗試在AsyncTask中修改佈局的內容,則會出現錯誤。然而,AsyncTask的onPreExecute
和onPostExecute
方法在主線程上運行,因此您可以在那裏更新UI。
所以,要回答你的問題,是的,操作系統通過不允許異步UI更新來照顧你。
onProgressUpdate()呢?它也運行在主線程上,不是嗎?可以在那裏添加行嗎?如果是的話,我需要同步它還是隻需正常添加行? – ilomambo
'onProgressUpdate()'也在主線程上運行。在該方法中添加或刪除行是完全正確的。但是,用戶可以在發生這種情況時與應用程序進行交互,因此他們可能會注意到正在查看列表的行被添加和刪除。只要他們只是看着項目,這將是很好的。如果行有點擊監聽器,您可能會遇到一些奇怪的情況,但我從來沒有嘗試過您描述的內容,所以我不確定。 – MattDavis
還有一點需要注意的是,如果允許用戶在AsyncTask運行時切換活動,它將在後臺繼續。在完成之前,活動不會被銷燬或收集垃圾,並且您的任務本質上將佔用無用的週期。這不會導致你的應用程序直接崩潰,因爲所有的UI組件和類變量都保存在內存中直到被銷燬,但可能會導致問題,例如稍後出現OOM錯誤,或者根據運行的Android版本,阻止未來AsyncTask由於正在使用線程而運行。 – MattDavis