从服务器下载许多图像到android

时间:2013-10-23 18:35:24

标签: java android android-asynctask threadpoolexecutor

我需要从服务器下载一些位图到android。我想使用.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)执行的AsyncTask。但我的执行人不堪重负。所以我想,如果我拖延,那应该会有所帮助。所以我的问题是:如何延迟执行人?我在考虑使用handler.postDelay,但只接受runnables。有没有办法让它与执行者一起工作?

一个好的解决方案可能是一次运行20个调用,然后等待100毫秒来运行下一个20.有没有人知道在android上做到这一点的方法?

@pete

我每次通话都使用一个线程。我不确定一个线程中的多个调用是否会导致问题。

@Override
protected Bitmap doInBackground(Void... params) {
   try {

      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setDoInput(true);
      conn.connect();
      InputStream is = conn.getInputStream();
      return BitmapFactory.decodeStream(is);
   } catch (IOException e) {
      e.printStackTrace();
      return null;
   }
}

2 个答案:

答案 0 :(得分:0)

如果您只想添加暂停,请在doInBackground中使用以下内容:

count = 1;
// use your loop of choice
for(int i = 0; i < n; i++) {
            // Do your stuff here...
    if(count % 20) { // Sleep every 20 iterations
        Thread.sleep(100);
    }
    count++;
}

然而,正如@petey所说,代码将是一个更好的帮助。根据您正在做的事情,可能是比使用AsyncTask(可能是IntentService)更好的选择。

答案 1 :(得分:0)

+1到cYrixmorten使用IntentService的想法。根据我的经验,它比使用AsyncTask更可靠,特别是在下载大量信息时。

如果你专门处理下载图片,你看过Universal Image Loader吗?它是专为特定目的而设计的开源库。我已经在我的几个项目中使用它,我发现它很容易实现,它为你处理图像下载,线程和缓存。

希望这有帮助!