2012-11-23 17 views

Antwort

5

Sie werden keinen wirklichen Nutzen aus der Wiederverwendung der HttpURLConnection bekommen.

Eine Sache, die stark Ihre Anwendung profitieren, wenn Sie einige Zeit mit der Suche in Async Aufgaben, verbringen die es Ihnen erlaubt, Ihren Haupt Code, um die Leistung von Multi-Threaded HTTP-Anforderungen mit Rückrufen zu nutzen.

Siehe: http://www.vogella.com/articles/AndroidPerformance/article.html für ein gutes Beispiel dafür, wie Async Tasks verwendet werden können.

Ein guter Ausgangspunkt ist aber natürlich die Android Developers Blog, wo sie für das Herunterladen eines Bildes von einem Server asynchron ein Beispiel haben, die Ihren Anforderungen gut übereinstimmen. Mit etwas Anpassung können Sie Ihre Anwendung senden mehrere asynchrone Anforderungen gleichzeitig für eine gute Leistung. http://android-developers.blogspot.co.uk/2009/05/painless-threading.html

Der Schlüsselbereich betrachten heißt: von

public void onClick(View v) { 
    new DownloadImageTask().execute("http://example.com/image.png"); 
} 

private class DownloadImageTask extends AsyncTask { 
    protected Bitmap doInBackground(String... urls) { 
     return loadImageFromNetwork(urls[0]); 
    } 

    protected void onPostExecute(Bitmap result) { 
     mImageView.setImageBitmap(result); 
    } 
} 

Die loadImageFromNetwork Methode ist, wo der Download stattfindet, und wird völlig asynchron entfernt

Der Artikel Google kann gefunden werden Ihr Haupt-UI-Thread.

Als einfaches Beispiel, könnten Sie Ihre Anwendung ändern, dies zu nennen wie so:

for(int i = 0; i < 100; i++){ 
    new DownloadImageTask().execute("http://www.android.com/image" + i + ".jpg"); 
} 

Obwohl für eine Optimierung, würde ich auf einmal nicht zu 100 Anfragen werfen, vielleicht ein Thread-Warteschlangen-System zu schaffen, die erlaubt vielleicht 4 oder 5 gleichzeitige Verbindungen und hält dann den Rest durch, wenn ein anderer fertig ist, indem ein ArrayList von ausstehenden Anforderungen zum Ablesen aufrechterhalten wird.

0

Egal, wie Sie es tun, werden Sie am Ende mehrere Verbindungen zu öffnen, eine, um jedes Bild zu bekommen. So wird ein Bild empfangen. Und es gibt keine Möglichkeit, die HttpURLConnection sowieso zu ändern. Das könnte in diesem Sinne gut aussehen.

Sie könnten jedoch versuchen, mehrere Bilder gleichzeitig durch Threading zu laden. Es wäre etwas komplex, ein solches Schema zu implementieren, aber durchaus möglich. Es würde den Prozess beschleunigen, indem mehrere Bilder gleichzeitig angefordert werden.

+2

Es tut Verbindung Pooling hinter den Kulissen. – EJP