मैं StrictMode के बारे में मेरे एप्लिकेशन में समस्याएं हैं, और कोड स्निपेट कि मूल रूप से अक्षम कर देता है StrictModeHelper
कृपया नेटवर्किंग बग को ठीक गयी।
कौन सी विधि पसंद की गई है .. या वे मूल रूप से वही कर रहे हैं?
@TargetApi
और @SuppressLint
ही कोर प्रभाव है: वे एक प्रकार का वृक्ष त्रुटि को दबाने।
अंतर यह है कि @TargetApi
साथ, आप घोषणा पैरामीटर के माध्यम से, है, क्या एपीआई स्तर पर आप अपने कोड में संबोधित किया है ताकि फिर से त्रुटि पॉप अप आप बाद में विधि को संशोधित करता है, तो कुछ नए संदर्भित एपीआई से कोशिश करने के लिए कर सकते हैं स्तर @TargetApi
में उद्धृत किया गया।
उदाहरण के लिए, मान लीजिए कि StrictMode
को अपने नेटवर्किंग बग के बारे में शिकायतों को अवरुद्ध करने के बजाय, आप AsyncTask
के एंड्रॉइड के नए संस्करणों पर क्रमबद्ध होने के मुद्दे पर काम करने की कोशिश कर रहे थे। आप नए उपकरणों पर थ्रेड पूल करने के लिए ऑप्ट और पुराने उपकरणों पर डिफ़ॉल्ट multithread व्यवहार का उपयोग करने के अपने कोड में इस तरह की एक विधि है:
@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 तक, लिंट शिकायत नहीं करेगा। इस मामले में, यह काम करता है। यदि, हालांकि, मैंने इस विधि को कुछ ऐसा संदर्भित करने के लिए संशोधित किया जो API स्तर 14 तक नहीं जोड़ा गया था, तो लिंट त्रुटि फिर से दिखाई देगी, क्योंकि मेरी @TargetApi(11)
एनोटेशन का कहना है कि मैंने केवल से नीचे API स्तर 11 और
पर काम करने के लिए कोड तय किया है ऊपर,
से नीचे एपीआई स्तर 14 और
नहीं।
@SuppressLint('NewApi')
का उपयोग करना, मैं एक प्रकार का वृक्ष त्रुटि के लिए किसी भी एपीआई स्तर क्या मेरी कोड संदर्भ और क्या मेरी कोड को संभालने के लिए सेट किया गया है की परवाह किए बिना खो देते हैं, करेंगे।
इसलिए, @TargetApi
, पसंदीदा एनोटेशन है, क्योंकि यह आप का निर्माण उपकरण बताने के लिए अनुमति देता है एक अधिक परिष्कृत फैशन में "ठीक है, मैं समस्याओं की इस श्रेणी तय"।
मुझे पता है कि एक Async दृष्टिकोण का उपयोग करना बेहतर होगा, बस मेरे विशेष मामले में मैं कामकाज के साथ रहूंगा। इस विस्तृत और बहुत समझने योग्य स्पष्टीकरण के लिए धन्यवाद - और इस मौके पर, आपके बहुत ही उपयोगी वेब पेजों के लिए धन्यवाद, जिसने मुझे एंड्रॉइड प्रोग्रामिंग की कुछ अवधारणाओं को समझने में बहुत मदद की! आर – richey
@richey: "बस मेरे विशेष मामले में मैं कामकाज के साथ रहूंगा" - यह एक अच्छा विचार नहीं है। मोबाइल डिवाइस मोबाइल हैं। नेटवर्क कनेक्शन बल्कि अस्थिर हैं और विभिन्न परिस्थितियों में काफी अधिक समय ले सकते हैं (उदाहरण के लिए, कमजोर सिग्नल)। मुख्य अनुप्रयोग धागे पर नेटवर्क I/O निष्पादित करने का अर्थ है कि आपका ऐप फ़ील्ड में एएनआर के साथ यादृच्छिक रूप से क्रैश हो जाएगा। – CommonsWare
वाह, आपका कोड उदाहरण सटीक कोड है जिसे मैं लिखने की कोशिश कर रहा हूं! क्या संयोग है :) –