In my app i’m using code like the following to download several images.
Is it High-Performance to do it like that or can I reuse the connection somehow?
for(int i = 0; i < 100; i++){
URL url = new URL("http://www.android.com/image" + i + ".jpg");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
finally {
urlConnection.disconnect();
}
}
}
You won’t really get any benefit from reuse of the
HttpURLConnection.One thing that will greatly benefit your application is if you spend some time looking into Async Tasks, which will allow you to harness the power of multi threaded HTTP requests with callbacks to your main code.
See:
http://www.vogella.com/articles/AndroidPerformance/article.html
for a good example of how Async Tasks can be utilised.
A good starting point though is of course the Android Developers Blog, where they have an example for downloading an image from a server asynchronously, which will match your requirements nicely. With some adaptation you can have your application sending multiple asynchronous requests at once for good performance.
The Google article can be found at:
http://android-developers.blogspot.co.uk/2009/05/painless-threading.html
The key area to look at is:
The
loadImageFromNetworkmethod is where the downloading takes place, and will be completely asynchronous away from your main UI thread.As a basic example, you could modify your application to call this like so:
Though for an optimisation, I wouldn’t throw 100 requests out at once, maybe creating a Threaded queue system which will allow maybe 4 or 5 concurrent connections and then keep the rest coming through when another finishes by maintaining an
ArrayListof pending requests to read off.