首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在android中的多线程环境中填充视图

无法在android中的多线程环境中填充视图
EN

Stack Overflow用户
提问于 2011-05-12 06:35:53
回答 2查看 188关注 0票数 0

android.view.ViewRoot$CalledFromWrongThreadException::Error 05-12 11:56:45.793: ERROR/AndroidRuntime(505):由:引起,只有创建视图层次结构的原始线程才能触摸其视图。

我做了什么,

我的活动中有一个列表视图,我需要通过执行以下操作来填充列表视图:mylistview.setAdapter(new CustomAdapter());

现在我的UI线程已经承受了太多的压力,所以,考虑在AsynTask中调用这个方法。

另一个问题

当用户单击按钮填充列表视图时,有一个进度对话框显示在我的活动中。当我将所有内容放在一个线程中时,进度对话框将不会显示。我问了一个关于堆栈溢出的问题,为什么进度对话框没有显示,我得到了一个答复,说我需要把所有额外的任务放在另一个线程中。

我还读过安卓开发人员网站上给出的安卓中的更新UI:,但在那里,我们所做的就是创建一个新的可运行程序,并将运行程序发布到UI线程的处理程序中,这样当UI空闲时,runnable就会被执行。但是,上述这些如何解决我的目的呢?我的意思是UI线程仍然在执行指令。

唯一能承受UI线程负载的方法是,如果我创建另一个线程并将所有的工作放在那里.但是android不允许这样做?

  • 我的理解有什么问题(如果有什么问题)?
  • 我如何解决这个问题?

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-12 06:43:34

Android确实允许您将额外的工作放在不同的线程中,并使用AsyncTask在UI线程上发布结果。将UI更新阶段添加到onPostExecute()方法的AsyncTask中,您应该会做得很好。onPostExecute()是在UI线程上执行的,AsyncTask文档中的示例是一个很好的例子。

另外,如果您正确地构建了应用程序,并且不经常使用图形,那么在应用程序运行期间,UI线程应该不会有太多的工作。在单独的线程上移动不完全绑定到UI的所有内容。AsyncTask是一种非常方便的方法。

票数 0
EN

Stack Overflow用户

发布于 2011-05-12 06:48:50

AsyncTask是解决问题的正确方法。您遇到困难的地方正是要把什么放入AsyncTask。从mylistview.setAdapter();onProgressUpdate方法调用onPostExecute。所以做这样的事:

代码语言:javascript
复制
 void setProgress(Integer progress){ myprogressbar.setValue(progress); }
 void setAdapter(CustomAdapter result){ mylistview.setAdapter(result); }
 private class LongRunningTask extends AsyncTask<String, Integer, CustomAdapter> {
     protected Long doInBackground(String... urls) {
         CustomAdapter res = null;
         // do all the work to BUILD the custom adapter, calling publishProgress() as progress gets made
         publishProgress(<progress value>);
         return res;
     }

     protected void onProgressUpdate(Integer... progress) {
          setProgress(progress);
     }

     protected void onPostExecute(CustomAdapter result) {
        setAdapter(result);
     }
 }

这应该可以解决线程问题,并让您设置进度栏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5974211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档