Я делаю HTTP-запрос на скачивание файла.Этот запрос данных, а также запись данных на диск выполняется в AsyncTask
.Однако случайным образом при загрузке файла приложение будет зависать на 5-10 секунд, пока следующий блок данных будет считан с помощью inputStream.read()
.Так как это в AsyncTask
, приложение не должно зависать, правильно?
Ниже приведен код для запуска AsyncTask
(псевдокод):
MyClass {
public boolean onContextItemSelected(MenuItem item) {
(...)
DownloadMedia dm = new DownloadMedia();
dm.startDownload();
}
}
И код, который выполняет загрузку:
public class DownloadMedia {
public void startDownload() {
DownloadMediaTask task = new DownloadMediaTask();
task.execute();
}
private class DownloadMediaTask extends AsyncTask<Void, Integer, Void> {
protected Void doInBackground(Void... params) {
(...)
URL url = new URL(file.getUrl());
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();
byte[] buffer = new byte[1024 * 50];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer, 0, buffer.length)) != -1) {
fileOutput.write(buffer, 0, bufferLength);
}
fileOutput.close();
return null;
}
}