2016-08-11 5 views
1

Я использую следующий код для загрузки файла с сервера:Android активной загрузки темы

URL url = new URL(urlString); 

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
urlConnection.setRequestMethod("GET"); 
urlConnection.setDoOutput(false); 
urlConnection.connect(); 


StorageTools.maintainMemoryEmptyThreshold(25); 
if (tempFolderFile.createNewFile()) { 
    tempFolderFile.createNewFile(); 
} 

FileOutputStream fileOutput = new FileOutputStream(tempFolderFile); 
InputStream inputStream = urlConnection.getInputStream(); 
int totalSize = urlConnection.getContentLength(); 
int downloadedSize = 0; 
byte[] buffer = new byte[8096]; 
int bufferLength = 0; 
while ((bufferLength = inputStream.read(buffer)) > 0) { 
    fileOutput.write(buffer, 0, bufferLength); 
    downloadedSize += bufferLength; 
    LOGGER.debug("Progress: downloadedSize: " + downloadedSize + "totalSize: " + totalSize); 
} 

fileOutput.close(); 
if (downloadedSize == totalSize) { 
    LOGGER.info("Downloaded at " + tempFolderFile.getAbsolutePath()); 
    StorageTools.moveFile(tempFolder, targetFolder, fileName); 
    return true; 
} 

Я запускать загрузку, используя новую нить в TempFolder, переместите его в нужную папку после завершения загрузки. Как поддерживать ограничение количества активных потоков загрузки и добавлять оставшиеся загрузки в очередь?

Кроме того, следующие мои опасения в связи с этим:

  1. Есть ли способ, в котором я могу включить Threadpool исполнитель для очереди загрузки с помощью описанных выше функций?
  2. Буфер влияет на скорость загрузки?

ответ

Смежные вопросы