Android 如何处理线程和主线程更新listitem时的冲突

Android 如何处理线程和主线程更新listitem时的冲突,android,listview,Android,Listview,我有一个下载列表,它将由下载线程回调更新,在某些情况下,列表将由NotifyDatasetChanged()更新,因此会发生冲突,因为它们都需要调用getview()方法 下载线程-->回调-->getview()以指定项目视图-->update viewholder 主线程-->刷新数据-->NotifyDatasetChanged()-->call getview()-->update viewholder 如何处理这些情况?通常,您不希望从两个不同的线程处理数据。至少,不是没有保护。另外,

我有一个下载列表,它将由下载线程回调更新,在某些情况下,列表将由NotifyDatasetChanged()更新,因此会发生冲突,因为它们都需要调用getview()方法

下载线程-->回调-->getview()以指定项目视图-->update viewholder

主线程-->刷新数据-->NotifyDatasetChanged()-->call getview()-->update viewholder


如何处理这些情况?

通常,您不希望从两个不同的线程处理数据。至少,不是没有保护。另外,您不能在非UI线程上修改视图。更新视图的备份数据(不是视图本身,只是视图表示的项),并调用
notifydatasetchange()
。列表将在此时与适配器一起重新呈现视图,此时适配器可以相应地更新视图。

谢谢各位。您的意思是更新数据源而不是视图本身吗?但是,我不确定每隔500毫秒调用NotifyDatasetChange()是否有问题?是的,只更新备份数据而不是视图本身。即使这样,您也需要确保保护对数据的访问。每500毫秒更新一次数据会非常有挑战性。谢谢拉里。我想我需要改变原来的设计。没问题,希望有帮助。@Simon你也可以检查DiffUtil。如果你经常更新你的列表,这会很有帮助。