I'm attempting to download a zip file using HttpCLient 4 which is going around .5 (kilobytes/kilobits)? each minute. The file is under a Megabytes large, and also the download will most likely take an hour or so! Shall We Be Held doing a problem? How else must i do that? Here's my current implementation:

@Override
            protected Uri doInBackground(String... params) {
                publishProgress("Downloading...");  
                try {
                        HttpPost searchPOST = new HttpPost("http://www.somesite.com/" + searchResult.getURLSuffix());
                        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
                        //added parameters here...
                        UrlEncodedFormEntity paramsEntity = new UrlEncodedFormEntity(formparams, HTTP.UTF_8);
                        searchPOST.setEntity(paramsEntity);


                HttpResponse manualResponse = client.execute(searchPOST);

                Header fileNameHeader = manualResponse.getFirstHeader("Content-Disposition");
                Pattern p = Pattern.compile("filename=\"(.+?)\"");
                Matcher m = p.matcher(fileNameHeader.getValue());

                if (m.find()) {
                    String fileName = m.group(1);
                    InputStream zipStream = manualResponse.getEntity().getContent();
                    File cacheDir = context.getCacheDir();
                    String tempFileForZip = cacheDir.getAbsolutePath() + "/" + fileName;
                    FileOutputStream fos = new FileOutputStream(tempFileForZip);
                    int bytesDownloaded = 0;
                    try {
                        int c;
                        while ((c = zipStream.read()) != -1) {
                            fos.write(c);
                            bytesDownloaded++;
                            kilobytesDownloaded=(bytesDownloaded / 1000);
                            publishProgress((String[])null);
                        }
                    } finally {
                        if (zipStream != null) {
                            zipStream.close();
                        }
                        if (fos != null) {
                            fos.close();
                        }
                    }

                    fos.close();


                String zipFilePath = tempFileForZip;

                //Change to indeterminate
                kilobytesDownloaded = fileSize;
                publishProgress("Extracting...");

                //TODO: Preferences for save directory
                saveDirectory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "Downloads/");
                ZipTools.unzipArchive(new File(zipFilePath), saveDirectory);

                }

                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } finally {

                    }

                return Uri.fromFile(saveDirectory);
         }

Step #1: Don't call publishProgress() for each byte.

Step #2: Read greater than a byte at any given time. Even better, avoid using the InputStream directly -- use HttpEntity#writeTo() to possess HttpClient write your computer data towards the output file.