HTTP-запрос в Async Task блокирует пользовательский интерфейс - PullRequest
0 голосов
/ 15 августа 2011

Я делаю 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;

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...