2012-05-03 46 views
0

我有一個TableLayout,在一個ScrollView,它不斷更新由AsyncTask。由的AsyncTaskAndroid如何同步佈局視圖?

我不知道這是否是「合法」到添加/刪除行時,同時用戶可能滾動TableLayout。

如何確保更新不會干擾GUI中的滾動?

或者操作系統照顧這個嗎?

回答

0

在Android上,您的應用程序運行的主線程是唯一可以更新UI的線程。如果您嘗試在AsyncTask中修改佈局的內容,則會出現錯誤。然而,AsyncTask的onPreExecuteonPostExecute方法在主線程上運行,因此您可以在那裏更新UI。

所以,要回答你的問題,是的,操作系統通過不允許異步UI更新來照顧你。

+0

onProgressUpdate()呢?它也運行在主線程上,不是嗎?可以在那裏添加行嗎?如果是的話,我需要同步它還是隻需正常添加行? – ilomambo

+0

'onProgressUpdate()'也在主線程上運行。在該方法中添加或刪除行是完全正確的。但是,用戶可以在發生這種情況時與應用程序進行交互,因此他們可能會注意到正在查看列表的行被添加和刪除。只要他們只是看着項目,這將是很好的。如果行有點擊監聽器,您可能會遇到一些奇怪的情況,但我從來沒有嘗試過您描述的內容,所以我不確定。 – MattDavis

+0

還有一點需要注意的是,如果允許用戶在AsyncTask運行時切換活動,它將在後臺繼續。在完成之前,活動不會被銷燬或收集垃圾,並且您的任務本質上將佔用無用的週期。這不會導致你的應用程序直接崩潰,因爲所有的UI組件和類變量都保存在內存中直到被銷燬,但可能會導致問題,例如稍後出現OOM錯誤,或者根據運行的Android版本,阻止未來AsyncTask由於正在使用線程而運行。 – MattDavis