2015-06-17 9 views
10

मैं सोच रहा था कि क्या कोई प्रदर्शन बाधा या समस्या होगी यदि मैं अपने "संपूर्ण एंड्रॉइड एप्लिकेशन" की सेवा के लिए OkHttpClient का एक उदाहरण बनाउंगा। यानी, मेरे आवेदन वर्ग में, मैं एक स्थिर सार्वजनिक चर बना देता हूं जिसमें OkHttpClient का एक उदाहरण होगा और जब भी मुझे http अनुरोध करने की आवश्यकता होती है, मैं मूल रूप से एक अनुरोध ऑब्जेक्ट बनाता हूं, फिर अनुरोध को आग लगाने के लिए बनाए गए okhttpclient उदाहरण का उपयोग करें।okhttp एप्लिकेशन स्तर OkHttpClient इंस्टेंस

कोड होने की तरह इस

public class MyApplication extends Application { 
    public static OkHttpClient httpClient; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     httpClient = new OkHttpClient(); 
    } 

} 

// Making request 1 
Request request1 = new Request.Builder().url(ENDPOINT).build(); 
Response response = MyApplication.httpClient.newCall(request1).execute(); 

// Making request 2 
Request request2 = new Request.Builder().url(ENDPOINT).build(); 
Response response = MyApplication.httpClient.newCall(request2).execute(); 

उत्तर

17

एक उदाहरण का उपयोग करते हुए एक समस्या के बजाय यह सबसे अच्छा अभ्यास है नहीं है। आप github से एक समान ऐप देख सकते हैं जो OkHttpClient सिंगलटन बनाने के लिए डैगर का उपयोग करता है और इसे अन्य मॉड्यूल इंजेक्ट करता है।

और आप देख सकते हैं in this discussion JakeWharton इस तरह के उपयोग का भी सुझाव दे रहा है।

लेकिन यदि आप इस उद्देश्य के लिए सिंगलटन पैटर्न का उपयोग करते हैं तो बेहतर होगा।

+1

धन्यवाद @bhdrkn। मैंने दोनों चर्चा और सिंगलटन शैली देखी है और मुझे लगता है कि मैं इसके लिए जाऊंगा। –

+0

कृपया ध्यान दें: सिंगल इंस्टेंस सिंगलटन https://www.thekua.com/atwork/2009/01/singleton-vs-single-instance/ जैसा नहीं है। –

+1

यदि मेरे पास एकाधिक डोमेन हैं तो मुझे प्रति डोमेन एक okhttp उदाहरण का उपयोग करना चाहिए, है ना? –

0

अलावा क्या @bhdrkn सही ढंग से पता चलता है से, निश्चित रूप से इसकी पुष्टि करने के OkHttpClient की एक सिंगलटन उदाहरण जाने के लिए एक सही तरीका, प्रलेखन से एक अंश है:

स्रोत: https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html

OkHttpClients होना चाहिए साझा

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

OkHttpClient उदाहरण प्रारंभ करने के सही तरीकों को देखने के लिए जावाडोक (ऊपर लिंक) का संदर्भ लें।

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