在Android AsyncTask的onPostExecute更新ListView的适配器的话会导致fragment切换时变得很卡 110
我是使用ViewPage+Fragment,Fragemnt布局里有ListView,在异步类AsyncTask里更新ListView的适配器adapter.notify...
我是使用ViewPage+Fragment,Fragemnt布局里有ListView,在异步类AsyncTask里更新ListView的适配器adapter.notifyDataSetChanged();
onPostExecute
方法里只要有运行过一次adapter.notifyDataSetChanged();
就会卡,不知道什么原因。 展开
onPostExecute
方法里只要有运行过一次adapter.notifyDataSetChanged();
就会卡,不知道什么原因。 展开
4个回答
展开全部
首先来看一下AsyncTask的基本用法,由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它。在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下:http://www.ijiami.cn/newsInfo?id=291&v=3
1. Params
在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。
2. Progress
后台任何执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位。
3. Result
当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型。
1. Params
在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。
2. Progress
后台任何执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位。
3. Result
当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型。
追问
这个我比你更清楚....
展开全部
在onPostExecute里面不要直接写刷新适配的adapter.notifyDataSetChanged(),一般把刷新适配提出来。在真正的主线程写一个方法。将异步返回的数据传入主线程。在这个方法里面刷新适配器。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-09-18 · 知道合伙人软件行家
关注
展开全部
onPostExecute是主线程在执行的,跟onPostExecute没关系吧
你切换fragment的时候,是不是去加载listView了
如果你每次切换都去加载,估计会卡
优化你的ListView吧,用缓存
你切换fragment的时候,是不是去加载listView了
如果你每次切换都去加载,估计会卡
优化你的ListView吧,用缓存
追问
切换时并没有再次加载listView,而且适配器已经做了优化。适配器更新所用的时间<0.001秒,onPost方法里注释掉adapter.notifyDataSetChanged();就能正常响应
追答
尽量不要使用AsyncTask
AsyncTask用了线程池,包装了Thread + handler
还不如直接用Thread + handler
有handler好了,你在onPostExecute给handler发个消息,让主线程去刷新
AsyncTask开消太大了,很影响性能的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
更新UI最好放在主线程吧,在类里写个更新UI的方法,然后在接到异步任务完成的信息后在更新
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询