0

从网络中检索东西无法在android的UI线程中完成。 我试图解决这个问题是这样的...输入错误计数的线程

for(i=0;i<list.size();i++){ 

    //add a UI element 

    new Thread(new Runnable(){ 
     public void run(){ 
      //retrieve online content 
     } 
    }).start(); 
    LinearLayout.addView(MyView); 

}

android docs

线内的部分类似的例子存取清单与get()方法。当“i”应该为0以获得列表中的第一项时,“i”实际上是1,并且如果只有一个项目,则导致OutOfBoundsException。我会猜测我在这里遇到了线程安全问题。有没有简单的方法来解决这个问题?

回答

2

阅读此http://developer.android.com/reference/android/os/AsyncTask.html以使用AsyncTask在后台执行任务,而不是使用Threads

AsyncTasks提供很好的包装来执行后台任务和postExecute任务(直接在UI线程)等

编辑: 也从你的代码林不知道这将是正确的做法......看起来你正在运行您的list中每个元素的线程。

,是

LinearLayout.addView(MyView); 

真的取决于你在后台执行任务吗?如果是的话,在从网络(以及线程内部)获取所有数据之后执行一次,因为那样只有您会知道该任务已完成。如果没有,那么没有理由把它放在这里..

而必须当线程/任务是在运行一个线程(异步更好的任务),从网络检索和显示/更新UI ...

+0

异步任务非常感谢 – Jack 2012-02-23 07:55:02