1

抱歉,如果我错过了一些明显的东西,我非常努力,但没有找到任何线索来回答我的问题。

所以,我的任务是使用它们的 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 并采取另一种方法进行下载

我将非常感谢您的建议。我的经验仍然非常有限,无法做出正确的决定。提前致谢!

4

0 回答 0