AsyncTaskを使用して、インターネットから最大50MBのファイルをダウンロードしています。このファイルをダウンロードすると、プログレスバーのゲインが非常に遅くなることがあります(Wi-Fiを使用している場合でも)。そして1分後、電話が表示され、ダウンロードが完了しましたが、ファイル自体には100kBしかなく、それ以上はありません。しかし、デバイスを再起動してファイルをダウンロードしようとすると、ダウンロードが短時間ですばやく実行されます。誰かが同じ問題に直面しましたか?新しいファイルをダウンロードする前に、同じダウンロードメモリを消去する必要がありますか?ファイルをEnvironment.externalStoryDirectory()にダウンロードしています。
どうも
アクティビティからのダウンロードの呼び出し:
mProgressDialog = new ProgressDialog(ItemDetails.this);
mProgressDialog.setTitle("Downloading");
mProgressDialog.setMessage("Downloading sth...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
DownloadMapTask downloadFile = new DownloadMapTask(ItemDetails.this);
downloadFile.execute(web_location_url);
mProgressDialog.show();
非同期タスクのダウンロード(2つの方法):
@Override
protected String doInBackground(String... urls) {
int count;
PATH=maps_loc+"/Android/data/test/maps/";
try {
URL url = new URL(urls[0]);
HttpURLConnection connection2 = (HttpURLConnection) url.openConnection();
connection2.setRequestMethod("GET");
connection2.setDoOutput(true);
connection2.connect();
int lenghtOfFile = connection2.getContentLength();
File apkdir = new File(PATH);
apkdir.mkdirs();
File newInstall = new File(PATH, name+".tmp");
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(newInstall);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1 && running==true) {
total += count;
publishProgress((int) (total * 100 / lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void onProgressUpdate(Integer... args) {
ItemDetails.mProgressDialog.setProgress(args[0]);
}