2 qq 30101569 qq_30101569 于 2016.09.20 18:01 提问

主线程中更新列表,子线程中获取数据

怎么做才能不出现数据已经更新而列表无响应的错误?我试过都放在主线程操作,太卡了,都放在子线程里android又报ui更新必须在主线程中的错误

8个回答

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2016.09.21 21:42
已采纳

数据改变啦,需要调用notifyDataSetChange来刷新数据啊

具体的看下这两篇博客吧:

http://www.cnblogs.com/monodin/p/3874147.html

http://blog.csdn.net/ueryueryuery/article/details/20607845

kelvin460022272
kelvin460022272   2016.09.20 18:28

我没有写过android,但是写过界面程序。一般这种情况都可以数据更新在子线程里做,更新完了可以推个消息到UI线程上,让UI线程去拉数据更新。

kelvin460022272
kelvin460022272 这个你可以部分更新也可以啊,每更新一部分就让UI去拉更新的数据。只要你让UI知道哪些数据可以拉就可以了。不知道符不符合你应用场景的要求,只是提供个思路。
大约一年之前 回复
qq_30101569
qq_30101569 回复kelvin460022272: 我之前想过等更新完了再让界面更新,不过数据量大的话这样的操作会让用户觉得等待时间太长
大约一年之前 回复
qq_32371277
qq_32371277   2016.09.20 19:36

可以用异步操作呀,比如simplequeryhandler,asynctask

guwei4037
guwei4037   Ds   Rxr 2016.09.20 20:14

可以看下这篇博客,这类问题可以完美解决。
http://www.cnblogs.com/devinzhang/archive/2011/12/30/2306980.html

oSanYeCao1234567
oSanYeCao1234567   Ds   Rxr 2016.09.20 22:31

Handler用起来啊,子线程中请求数据,请求成功后使用Handler发送消息,

然后再主线程中处理消息,重写Handler的handlerMessage方法即可处理消息

qq_30101569
qq_30101569 试过了,会报这样的错误The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.
大约一年之前 回复
qq_35572348
qq_35572348   2016.09.21 09:39

用handler发送消息,通过接受到的消息更新UI。new Thread()或者Asynctask都可以开启异步

qq_24941637
qq_24941637   2016.09.21 12:47

runOnUiThread

u014610664
u014610664   2016.10.17 11:50

推荐使用RxAndroid

Csdn user default icon
上传中...
上传图片
插入图片