1

明らかなことを見逃していたら申し訳ありませんが、私は一生懸命努力しましたが、私の質問に答える手がかりが見つかりませんでした.

したがって、私の仕事は、URL を使用していくつかの画像をダウンロードし、それらをいくつかのフォルダーに保存することです。さまざまなアプローチを試みましたが、いくつかの理由から、これには AQuery を使用することにしました。ダウンロードは、アクティビティまたは AlarmManager から開始される IntentService で実際に行われます。画像をダウンロードする部分は、生成された URL から必要な量の画像をダウンロードするための for ループです。

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 を試してください。

私が理解しているように、ここには2つのオプションがあります。

  • aq.download で同じスレッドを使用する方法を見つける
  • AQuery を使用せず、別の方法でダウンロードする

アドバイスをいただければ幸いです。正しい判断を下すには、私の経験はまだ非常に限られています。前もって感謝します!

4

0 に答える 0