2015-09-27 7 views
6

में बहिष्कृत विधियों का उपयोग करके मुझे कैसे उपयोग/उपयोग नहीं करना चाहिए, मैं इस सवाल के बिना बहुत लंबा चला गया हूं। मैं एंड्रॉइड में कई विधियों में आया हूं जो बहिष्कृत हैं, लेकिन फिर भी एपीआई के नए संस्करणों में काम करते हैं। तो जब तक यह काम करता है तब तक एक बहिष्कृत विधि का उपयोग करने का जोखिम क्या है?एंड्रॉइड

यहां एक और विशिष्ट प्रश्न है। मैं टाइमपिकर्स के साथ काम कर रहा हूं और getCurrentHour() विधि एपीआई 23 में बहिष्कृत है और getHour() के साथ बदल दिया गया है। मैं स्पष्ट रूप से getHour() का उपयोग नहीं कर सकता, क्योंकि अधिकांश डिवाइस अभी तक एपीआई 23 पर नहीं हैं, लेकिन एंड्रॉइड के नवीनतम संस्करण के लिए getCurrentHour() "गलत" का उपयोग कर रहे हैं? मुझे निम्नलिखित में से कौन सा करना चाहिए?

  1. साल भर तक getCurrentHour() का उपयोग जारी रखें और एपीआई 23 मेरा नया minSdkVersion बन जाएगा?
  2. कोड में, स्पष्ट रूप से API संस्करण की जांच करें और परिणाम के आधार पर getCurrentHour() या getHour() पर कॉल करें?

मुझे सीखने में मदद के लिए धन्यवाद।

+0

के निर्माण में नुकसान पहुंचाया गया 'कोड में, स्पष्ट रूप से एपीआई संस्करण की जाँच करें और फोन या तो getCurrentHour() या getHour() परिणाम के आधार पर' है? सही तरीका – tyczj

उत्तर

9

एंड्रॉइड के नवीनतम संस्करण के लिए getCurrentHour() "गलत" का उपयोग कर रहा है?

यदि "गलत" से आपका मतलब है कि यह एक पिल्ला को मार देगा, नहीं, यह गलत नहीं होगा। और एपीआई स्तर 23 के लिए, किसी भी तरह की समस्या का कारण बनने की संभावना नहीं है।

सामान्य रूप से, "बहिष्कृत" का अर्थ है "हमारे पास कुछ और है जिसे हम आप उपयोग करना चाहते हैं"। बहिष्कृत सामग्री के साथ क्या होता है अलग-अलग होता है:

  • कभी-कभी, बहिष्कृत सामग्री अभी भी उपयोग योग्य वर्षों बाद भी होती है। AbsoluteLayout को एपीआई लेवल 3 में 200 9 में वापस कर दिया गया था। यह अभी भी के रूप में काम करता है जैसा कि यह पहले किया गया था।

  • कभी-कभी, बहिष्कृत सामग्री कार्यक्षमता को कम कर देगी। ActivityManager पर विभिन्न विधियों को हटा दिया गया है और सुरक्षा और गोपनीयता कारणों से, उनके द्वारा उपयोग किए जाने वाले सबसेट को वापस कर दिया गया है।

  • कभी-कभी, बहिष्कृत सामग्री को हटा दिया जाएगा (देखें: Android 6.0 में HttpClient (या, वास्तव में, इसे हटाया नहीं गया है, क्योंकि इसे हटाया गया था))। यह काफी असामान्य है।

इसलिए, एक बहिष्करण चेतावनी ध्यान देने का एक संकेत है और इस बारे में सोचें कि आपकी दीर्घकालिक रणनीति इस विशेष कार्यक्षमता के लिए क्या होगी।

मुझे निम्नलिखित में से कौन सा करना चाहिए?

इस विधि का नाम बदलने के रूप में के रूप में तुच्छ कुछ के लिए, आप शायद अपने पहले विकल्प के साथ सुरक्षित हैं (बहिष्कृत विधि के साथ चिपके रहते हैं जब तक आपके minSdkVersion काफी अधिक बढ़ जाता है)।

इससे भी बड़ा कुछ भी, हालांकि, मैं आपके दूसरे विकल्प के साथ जाऊंगा। कभी-कभी, आप उस संस्करण को स्पष्ट रूप से जांचेंगे। कभी-कभी, आप एक पुस्तकालय का उपयोग कर सकते हैं जो आपके लिए संस्करण जांच छुपाएगा। उदाहरण के लिए, support-v4 लाइब्रेरी में कहीं भी कहीं भी आपको ...Compat कक्षा (उदा।, NotificationCompat, ContextCompat, ActivityCompat), उस वर्ग की भूमिका नवीनतम और सबसे बड़ी एपीआई स्तर के समतुल्य एपीआई की आपूर्ति करना है, लेकिन एक जिसे उपकरणों की एक विस्तृत श्रृंखला पर उपयोग किया जा सकता है, क्योंकि यह पुराने उपकरणों पर गहराई से खराब हो जाता है उन संस्करणों को आपके लिए जांचना।

नोट: कोई वास्तविक पिल्लों इस जवाब

+0

kittehz भी मत भूलना .. xD – t0mm13b

+0

यह बिल्कुल सही उत्तर था जिसे मैं ढूंढ रहा था और मुझे आशा है कि दूसरों को यह मिल जाए और इसे उपयोगी लगे :) – NSouth

+0

कोई यह जानने के लिए कैसे जाता है कि कोई इसका उपयोग कर सकता है या नहीं लाइब्रेरी जो आपके लिए नौकरी करेगी? मुझे लगता है कि ओपी के रूप में ओपी के रूप में मुझे एक ही समस्या का सामना करना पड़ रहा है और मैं बस इसे "ठीक से कर रहा हूं", यानी जांच कर रहा हूं कि किस विधि का उपयोग करने से पहले 'android.os.Build.VERSION.SDK_INT> = 23' जांच रहा है। स्टूडियो अभी भी बहिष्कृत कार्यों के माध्यम से एक क्रॉस-आउट-लाइन डालता है और मुझे चेतावनी देता है :-(क्या मुझे एक या अधिक चालें याद आ रही हैं? – Yannick