抱歉,如果我错过了一些明显的东西,我非常努力,但没有找到任何线索来回答我的问题。
所以,我的任务是使用它们的 URL 下载几个图像并将它们存储在某个文件夹中。我尝试了不同的方法,但出于几个原因,我决定为此使用 AQuery。下载实际上是在 IntentService 中完成的,它是从 Activity 或 AlarmManager 启动的。我下载图像的部分是一个 for 循环,用于从生成的 URL 下载所需数量的图像:
for (int i=0; i < required; i++) {
url = makeURL(i);
aq.download(url, imgDir, new AjaxCallback() {
@Override
public void callback(String url, Object object, AjaxStatus status) {
super.callback(url, object, status);
File file = (File) object;
if (file.length() < 300 * 1024) { //just an example test
file.delete();
}
}
});
AQuery 为每次下载启动一个单独的线程,因此在我得到任何结果之前代码会继续执行。问题是图像可能因其他原因损坏或不适合,因此我在每次下载后以回调方法进行测试。如果图像未通过其中一项测试,我将删除该文件并需要从另一个 URL 重新下载图像。但是由于所有下载都是在一个独立的线程中完成的,所以我无法在我拥有所有“备用”URL 的同一个 IntentService 中捕获下载结果。
由于我的 IntentService 本身就是一个后台线程,我认为我可以在该线程中进行所有下载,每次下载后检查文件,如果它不正确,请尝试另一个 URL。
据我了解,我在这里有两个选择:
- 找到一种方法让 aq.download 使用相同的线程
- 不要使用 AQuery 并采取另一种方法进行下载
我将非常感谢您的建议。我的经验仍然非常有限,无法做出正确的决定。提前致谢!