2012-07-30 8 views
5

यह एक नोब सवाल हो सकता है, लेकिन मैं सोच रहा था कि हमें टोस्ट बनाने के लिए एक स्थिर विधि (मेकटेक्स्ट) का उपयोग क्यों करना है, न कि कन्स्ट्रक्टर। इस के बजायक्यों टोस्ट.मेकटेक्स्ट और नया टोस्ट नहीं

makeText(Context context, CharSequence text, int duration) 

:

क्यों हम इस का उपयोग करने की क्या ज़रूरत है

new Toast(Context context, CharSequence text, int duration) 

यह makeText विधि है:

public static Toast makeText(Context context, CharSequence text, int duration) { 
     Toast result = new Toast(context); 

     LayoutInflater inflate = (LayoutInflater) 
       context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null); 
     TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message); 
     tv.setText(text); 

     result.mNextView = v; 
     result.mDuration = duration; 

     return result; 
    } 

हम क्यों नहीं है निम्नलिखित:

public Toast (Context context, CharSequence text, int duration) { 
    this(context); 

    LayoutInflater inflate = (LayoutInflater) 
      context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null); 
    TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message); 
    tv.setText(text); 

    this.mNextView = v; 
    this.mDuration = duration; 
} 

मैंने किसी भी कारण से वेब और स्रोत कोड की खोज की लेकिन मुझे नहीं मिला।

यदि आपके पास कोई विचार है, तो संकोच न करें।

+1

शायद क्योंकि एक स्थिर विधि का उपयोग करना आसान है और हमें टोस्ट ऑब्जेक्ट बनाने की ज़रूरत नहीं है? :) – Slickelito

उत्तर

5

प्रश्न मूल रूप से ड्रिल चढ़ाव के रूप में यह उपयोग कर सकते हैं का उपयोग करने में सक्षम होने के लिए एक वस्तु टोस्ट बनाने के लिए कोई कारण नहीं है मैं एक विधि स्थिर बनाते हैं। जवाब सरल है- जब आपकी विधि का एक बहुत ही विशिष्ट कार्य होता है और वस्तु की स्थिति को नहीं बदलता है।

कुछ उपयोगिता विधि की तरह, कहते हैं (int a, int b) जो बस एक + बी देता है। यदि मुझे ऑब्जेक्ट के बाद के उपयोग के लिए मान ए + बी को स्टोर करने की आवश्यकता है, तो स्थैतिक विधि सख्ती से नहीं है (आप एक स्थैतिक विधि में एक गैर स्थिर चर को स्टोर करने में सक्षम नहीं होंगे)। लेकिन अगर हम किसी कार्यवाही से निपट रहे हैं जो वस्तु की स्थिति से स्वतंत्र है, तो स्थिर उत्तर है।

यदि हम वस्तु की स्थिति से स्वतंत्र हैं तो हम स्थैतिक को प्राथमिकता क्यों दे रहे हैं?

  1. स्मृति-स्थिर विधि में केवल एक प्रतिलिपि होगी, चाहे वस्तु की वास्तविक संख्या चाहे।भले ही आप एक वस्तु

बेशक नकारात्मक पक्ष यह है कि हम विधि भले ही हम यह बिल्कुल का उपयोग नहीं करते की एक प्रति रख रहे है की जरूरत नहीं है (अगर यह

  • Availability- विधि उपलब्ध है गैर स्थैतिक था और कोई वस्तु नहीं बनाई गई थी, हम इस जगह को सहेज लेते थे)। लेकिन यह ऊपर उल्लिखित फायदे से कम वजन का है।

    जिस तरीके से हम यहां चर्चा कर रहे हैं (मेकटेक्स्ट), बाद में उपयोग के लिए एक राज्य को बनाए रखने की आवश्यकता नहीं है, जाने का सबसे अच्छा तरीका स्थिर विधि है।

    --Edit--

    जवाब ऊपर उल्लेख किया है जब हम स्थिर और जब गैर स्थिर का उपयोग करना चाहिए के रूप में अधिक सामान्य है, मुझे टोस्ट वर्ग के लिए विशिष्ट मिलता है।

    टोस्ट वर्ग हमें जो एक टोस्ट वस्तु जो मान असाइन किए रिटर्न एक टोस्ट वस्तु बनाने के लिए 2 तरीके (देखें http://developer.android.com/reference/android/widget/Toast.html)

    1. makeText (संदर्भ संदर्भ, CharSequence पाठ, पूर्णांक अवधि) देता है।

    2. सामान्य तरीका, ऑब्जेक्ट बनाने के लिए नए टोस्ट (संदर्भ) का उपयोग करें, फिर आवश्यक मान सेट करें।

    यदि आप विधि 1 का उपयोग करते हैं, तो आप टोस्ट.मेकटेक्स्ट (संदर्भ, टेक्स्ट, अवधि) जैसे कुछ कह रहे हैं। शो(); और हम कर रहे हैं। मैं हर समय इस विधि का उपयोग करता हूं।

    विधि 2 एक टोस्ट के लिए सार्वजनिक निर्माता का उपयोग न करें जब तक कि आप करने जा रहे हैं setview (देखें) के साथ लेआउट को परिभाषित एक विशिष्ट मामले के लिए प्रयोग किया जाता है, http://developer.android.com/guide/topics/ui/notifiers/toasts.html

    से। यदि आपके पास उपयोग करने के लिए कस्टम लेआउट नहीं है, तो आपको टोस्ट बनाने के लिए मेकटेक्स्ट (संदर्भ, int, int) का उपयोग करना होगा।

    @CFlex, अगर मैं आपके सवाल का ठीक से मिला है, मुझे लगता है कि तुम सिर्फ जानना चाहता है कि हम Toast.makeText (संदर्भ, पाठ, अवधि) एक टोस्ट वस्तु, लौटने जब एक ही बात से किया जा सकता था है चाहता हूँ एक निर्माता

    जब भी मैं क्लासनाम.getObject क्लास की वापसी वस्तु की तरह कुछ देखता हूं, तो मैं सिंगलटन पैटर्न के बारे में सोचता हूं। खैर, इस मामले में हम सिंगलटन के बारे में बिल्कुल बात नहीं कर रहे हैं, मैं यह मानना ​​चाहूंगा कि मेकटेक्स्ट हमेशा एक ही ऑब्जेक्ट देता है (एन ऑब्जेक्ट्स के निर्माण को बचाने के लिए), अन्यथा यह एंड्रॉइड टीम द्वारा विकसित एक फैंसी चीज है।

  • +0

    मुझे आपका जवाब पसंद है :) – Arkde

    +0

    धन्यवाद @Arkde :) – Kamal

    +0

    @ कमल ठीक है मुझे लगता है कि मुझे यह मिला, लेकिन उन्होंने सिर्फ टोस्ट.शोटेक्स्ट (संदर्भ, स्ट्रिंग, int) क्यों नहीं बनाया? क्योंकि हम टोस्ट टी = टोस्ट.मेकटेक्स्ट (...) कर सकते हैं; साथ ही हम नए टोस्ट (संदर्भ, पाठ, dur) कर सकते हैं। शो(); मुझे मेकटेक्स्ट विधि बस बेकार लगता है। उन्होंने अन्य सीटीओआर या शो के तरीकों को क्यों नहीं किया। मुझे नहीं पता कि मैं काफी स्पष्ट हूं या नहीं। – AMerle

    1

    जहां तक ​​मुझे पता है:

    हम वस्तु टोस्ट, जो लगातार GarbageCollector से साफ तक इस्तेमाल किया स्मृति की राशि की आवश्यकता होगी का एक उदाहरण पकड़ नहीं करना चाहते हैं, क्योंकि है कि।

    और यह हमेशा प्रदर्शित होने तक पहुंच प्राप्त करता है, इसलिए आपके आवेदन के लिए अनुमतियों का कोई सेट आवश्यक नहीं है।

    2

    एक नियम: खुद से पूछें "क्या इस विधि को कॉल करने के लिए यह समझ में आता है, भले ही कोई ऑब्जेक्ट अभी तक नहीं बनाया गया हो?" यदि ऐसा है, तो यह निश्चित रूप से स्थिर होना चाहिए।

    याद रखें कि वस्तुएं स्मृति में रहती हैं और वे कुछ नौकरियों के लिए बनाई जाती हैं। कक्षा में सभी वस्तुओं के लिए स्टेटिक विधियां उपलब्ध हैं और इनका उपयोग करने के लिए ऑब्जेक्ट बनाना आवश्यक नहीं है।

    तो वहाँ विधि makeText, जब आप जब ऐसा करना चाहिए करने के लिए एक स्थिर विधि (और अधिक सुरुचिपूर्ण और कॉम्पैक्ट)

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