【发布时间】:2012-05-03 19:31:22
【问题描述】:
我在 ScrollView 中有一个 TableLayout,它由 AsyncTask 不断更新。
我不知道在用户可能正在滚动 TableLayout 的同时,AsyncTask添加/删除行是否“合法”。
如何确保更新不会干扰 GUI 中的滚动?
或者操作系统会为我解决这个问题?
【问题讨论】:
标签: android scrollview synchronized
我在 ScrollView 中有一个 TableLayout,它由 AsyncTask 不断更新。
我不知道在用户可能正在滚动 TableLayout 的同时,AsyncTask添加/删除行是否“合法”。
如何确保更新不会干扰 GUI 中的滚动?
或者操作系统会为我解决这个问题?
【问题讨论】:
标签: android scrollview synchronized
在 Android 上,运行应用程序的主线程是唯一可以更新 UI 的线程。如果您尝试从 AsyncTask 中修改布局的内容,则会收到错误消息。然而,AsyncTask 的 onPreExecute 和 onPostExecute 方法是在主线程上运行的,因此您可以在那里更新 UI。
所以,要回答您的问题,是的,操作系统会通过不允许异步 UI 更新来为您解决这个问题。
【讨论】:
onProgressUpdate() 也在主线程上运行。在该方法中添加或删除行是完全可以的。但是,在此过程中,用户将能够与您的应用程序进行交互,因此如果他们正在查看列表,他们可能会注意到正在添加和删除的行。只要他们只是看物品,就可以了。如果行有点击侦听器,您可能会遇到一些奇怪的情况,但我从未尝试过您所描述的内容,所以我不确定。