मेरे पास स्ट्रिक्टमोड के बारे में मेरे ऐप में मुद्दे हैं और कोड स्निपेट जोड़ा गया है जो मूल रूप से स्ट्रिक्टमोड हेल्पर को निष्क्रिय करता है
कृपया नेटवर्किंग बग को ठीक करें।
कौन सी विधि पसंद की जाती है .. या वे मूल रूप से वही कर रहे हैं?
@TargetApi
और @SuppressLint
एक ही मूल प्रभाव है: वे लिंट त्रुटि को दबा देते हैं।
अंतर यह है कि @TargetApi
आप पैरामीटर के माध्यम से घोषित करते हैं कि आपने अपने कोड में किस एपीआई स्तर को संबोधित किया है, ताकि अगर आप बाद में एपीआई स्तर का हवाला देते हुए की तुलना में कुछ नया करने का प्रयास करने के लिए विधि को संशोधित करते हैं, तो त्रुटि फिर से पॉप हो सकती है @TargetApi
।
उदाहरण के लिए, मान लीजिए कि StrictMode
आप अपने नेटवर्किंग बग के बारे में शिकायतों को रोकने के बजाय, AsyncTask
एंड्रॉइड के नए संस्करणों पर क्रमबद्ध होने के मुद्दे पर काम करने की कोशिश कर रहे थे । आपके पास कोड में इस तरह की विधि है कि नए उपकरणों पर थ्रेड पूल का चयन करें और पुराने उपकरणों पर डिफ़ॉल्ट मल्टीथ्रेड व्यवहार का उपयोग करें:
@TargetApi(11)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task,
T... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
else {
task.execute(params);
}
}
होने का @TargetApi(11)
मतलब है कि अगर लिंट यह पता लगाता है कि मैं अपने से कुछ नया उपयोग कर रहा हूं android:minSdkVersion
, लेकिन एपीआई स्तर 11 तक, लिंट शिकायत नहीं करेगा। इस मामले में, वह काम करता है। अगर, हालांकि, मैंने इस विधि को संशोधित किया है जो एपीआई स्तर 14 तक जोड़ा नहीं गया था, तो लिंट त्रुटि फिर से दिखाई देगी, क्योंकि मेरा @TargetApi(11)
एनोटेशन कहता है कि मैंने केवल एपीआई स्तर 11 पर काम करने के लिए कोड तय किया है और ऊपर, नीचे नहीं। एपीआई स्तर 14 और ऊपर से नीचे ।
उपयोग करते हुए @SuppressLint('NewApi')
, मैं किसी भी एपीआई स्तर के लिए लिंट त्रुटि को खो दूंगा, चाहे मेरा कोड संदर्भ और मेरे कोड को संभालने के लिए क्या सेट किया गया हो।
इसलिए, @TargetApi
पसंदीदा एनोटेशन है, क्योंकि यह आपको बिल्ड टूल्स को "ठीक है, मैंने समस्याओं की इस श्रेणी को" ठीक-ठाक ढंग से बताया है।