明らかなことを見逃していたら申し訳ありませんが、私は一生懸命努力しましたが、私の質問に答える手がかりが見つかりませんでした.
したがって、私の仕事は、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 を使用せず、別の方法でダウンロードする
アドバイスをいただければ幸いです。正しい判断を下すには、私の経験はまだ非常に限られています。前もって感謝します!