2013-07-28 70 views
0

我正在使用异步代码从for循环中的Web获取图像。请建议我能做些什么来快速生成此列表。我将这些数据传递给listview。异步任务运行速度非常慢

private class CreateItems extends AsyncTask<Void, Void, Void>{ 
    protected Void doInBackground(Void... params) { 
     android.os.Debug.waitForDebugger(); 
     SharedPreferences sp = getSharedPreferences(UserDataManagement.CATALOG, 0); 
     String items = sp.getString("items", ""); 
     try { 
      JSONArray array = new JSONArray(items); 
      for(int i=0;i<array.length();i++){ 
       JSONObject item = array.getJSONObject(i); 
       String id = item.getString("id"); 
       String firstName = item.getString("first_name"); 
       String lastName = item.getString("last_name"); 
       String imageUrl = item.getString("image"); 
       InputStream in = new java.net.URL(imageUrl).openStream(); 
       Bitmap imageBitmap = BitmapFactory.decodeStream(in); 
       in.close(); 
       Item item = new Item(id, firstName, lastName, imageUrl, imageBitmap); 
       itemList.add(item); 
       /* if(i!=0 && i%10==0){ 
        runOnUiThread(new Runnable() { 
         public void run() { 
          adapter.notifyDataSetChanged(); 
         } 
        }); 
       }*/ 
      } 
     } 
     catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onPostExecute(Void result) { 
     adapter.notifyDataSetChanged(); 
    } 
} 

回答

0

您应该在循环中创建异步任务,以并行方式从Web获取图像。

+0

感谢您的回复。但是,这仍然没有奏效。最终的解决方案是创建一个新的线程而不是异步任务,并使用并发锁定倒计时立即开始。我认为我之前的异步任务无法在通话结束后马上启动,或者被别的东西挡住了。为了通过网络获取图像,我使用了AsyncHttpClient。 – funambulist

0

工作的最终解决方案是创建一个新的线程而不是异步任务,并使其立即使用倒计时锁存器启动。我认为我之前的异步任务无法在通话结束后马上启动,或者被别的东西挡住了。为了通过网络获取图像,我使用了AsyncHttpClient。

final java.util.concurrent.CountDownLatch latch = new CountDownLatch(1); 
    Thread getInfo = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      latch.countDown(); 
          do something 
          runOnUiThread(new Runnable() { 
           public void run() { 
            list.add(item); 
            adapter.notifyDataSetChanged(); 
           } 
          }); 
        } 
    }); 

      getInfo.start(); 
    try { 
     latch.await(); 
    } 
    catch(InterruptedException ex){ 
     ex.printStackTrace(); 
    } 
相关问题