我需要从服务器下载一些位图到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;
}
}
答案 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吗?它是专为特定目的而设计的开源库。我已经在我的几个项目中使用它,我发现它很容易实现,它为你处理图像下载,线程和缓存。
希望这有帮助!