2012-11-23 15 views
6

का उपयोग कर मेरे ऐप में मैं कई छवियों को डाउनलोड करने के लिए निम्न जैसे कोड का उपयोग कर रहा हूं। क्या यह ऐसा करने के लिए उच्च प्रदर्शन है या क्या मैं किसी भी तरह कनेक्शन का पुन: उपयोग कर सकता हूं?HttpURLConnection

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(); 
      } 
     } 
} 

उत्तर

5

आपको HttpURLConnection के पुन: उपयोग से वास्तव में कोई लाभ नहीं मिलेगा।

एक बात है कि बहुत आपके आवेदन को फायदा होगा यदि आप कुछ समय बिताने के Async कार्य, जो आप अपने मुख्य कोड के लिए कॉलबैक के साथ बहु लड़ी HTTP अनुरोध की शक्ति का उपयोग करने की अनुमति देगा में देख रहा है।

देखें: http://www.vogella.com/articles/AndroidPerformance/article.html Async कार्य का उपयोग कैसे किया जा सकता है के एक अच्छे उदाहरण के लिए।

एक अच्छा प्रारंभिक बिंदु हालांकि एंड्रॉइड डेवलपर ब्लॉग है, जहां उनके पास सर्वर से एक छवि को अतुल्यकालिक रूप से डाउनलोड करने का एक उदाहरण है, जो आपकी आवश्यकताओं को अच्छी तरह से मेल करेगा। कुछ अनुकूलन के साथ आप एक अच्छा प्रदर्शन के लिए एक बार में कई एसिंक्रोनस अनुरोध भेज सकते हैं।

गूगल लेख पाया जा सकता है पर: http://android-developers.blogspot.co.uk/2009/05/painless-threading.html

प्रमुख क्षेत्र में है देखने के लिए:

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); 
    } 
} 

loadImageFromNetwork विधि है जहां से डाउनलोड जगह लेता है, और से दूर पूरी तरह से अतुल्यकालिक हो जाएगा आपका मुख्य यूआई थ्रेड।

एक बुनियादी उदाहरण के रूप में, आप अपने आवेदन तो इस तरह कॉल करने के लिए संशोधित कर सकते हैं: एक अनुकूलन के लिए

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

हालांकि, मैं शायद एक पिरोया कतार प्रणाली बनाने एक बार में बाहर 100 अनुरोधों फेंक नहीं होता है, जो शायद 4 या 5 समवर्ती कनेक्शन की अनुमति देगा और उसके बाद बाकी के माध्यम से आ रहा है जब लंबित अनुरोध के ArrayList बनाए रखने के द्वारा एक और खत्म बंद पढ़ने के लिए रहते हैं।

0

कोई फर्क नहीं पड़ता कि कैसे आप इसे करते हैं, आप एक खोलने एकाधिक कनेक्शन खत्म करने के लिए, प्रत्येक छवि प्राप्त करने के लिए जा रहे हैं। इस तरह कोई छवि प्राप्त होती है। और HttpURLConnection वैसे भी बदलने का कोई तरीका नहीं है। तो यह उस भावना से ठीक लग सकता है।

हालांकि, अगर आप सूत्रण के माध्यम से एक ही समय में एक से अधिक चित्रों लोड करने का प्रयास कर सकता है। ऐसी योजना को लागू करने के लिए यह कुछ जटिल होगा, लेकिन पूरी तरह से संभव है। यह एक ही समय में एकाधिक छवियों का अनुरोध करके प्रक्रिया को तेज करेगा।

+2

यह दृश्यों के पीछे कनेक्शन पूलिंग करता है। – EJP

संबंधित मुद्दे