输入错误计数的线程

时间:2012-02-22 18:31:28

标签: android user-interface network-programming thread-safety

无法在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。我猜这里有线程安全问题。有没有一种简单的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

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

编辑: 同样来自你的代码,我不确定这是否正确...看起来你正在为list中的每个元素运行一个线程。

并且是

LinearLayout.addView(MyView);

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

相反,您必须运行单个线程(更好的异步任务)才能从网络中检索,并在线程/任务结束时显示/更新UI ...