I'm writing an application for Android which let users browse a list of files and download them. For every download, I created a thread and I download the file with an HttpURLConnection instance (by reading from the connection in a while loop).
This method works fine with one active download. But when user starts more than one, download performance degrades dramatically. Most of the time, these parallel downloads consume all the bandwidth and the users is unable to browse files (which uses another HttpUrlConnection to load the files list).
Any suggestions on refining the download system? Thanks.
P.S.: The method that popular browsers such as Google Chrome and Firefox do seems good. Anyone knows how they work?
If user click music item, I add an downloading item to second listview and start download file with AsyncTask. User can click more than one music, it means downloading multiple files simultaneously. I can download files with AsyncTask.
Hold CTRL and click on the files you want to download. Once you have selected the files you want, right click on the last file you selected and select download.
Every additional file download increases the average speed and decreases the total time to completion. Six simultaneous downloads of roughly the same size can complete in 1/6 the elapsed time of a single download, if they all complete within a few seconds of each other.
Parallel downloads, also known as domain sharding, reduce the time it takes for a connection to be complete which results in faster page loading and download speeds.
Alas, i don't know of a way to throttle certain connections. However, a practical approach would be to implement a queue of downloads to control the number of simultaneous downloads. In your case, you would probably want to only let 1 thing download at a time. This can be implemented a few different ways.
Here's a way to do it with Handlers and a Looper: http://mindtherobot.com/blog/159/android-guts-intro-to-loopers-and-handlers/
Edit 1: See mice's comment. It may be smarter to have a max of 2 threads downloading at a time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With