2014-04-16 6 views
22

एंड्रॉइड लिंट के बारे में assert() का उपयोग किया जा रहा है, और इसके बजाय BuildConfig.DEBUG सशर्त चेक का उपयोग करने की अनुशंसा करते हैं।"BuildConfig.DEBUG सशर्त चेक" क्या हैं?

मुझे समझ में आया कि एंड्रॉइड पर उपयोग करने के लिए जोर क्यों सुरक्षित नहीं है, लेकिन बिल्कुल "BuildConfig.DEBUG सशर्त चेक" हैं?

निम्नलिखित उदाहरण कोड में संशोधन कैसे किया जाएगा?

Context ctx = getContext(); 
assert (ctx instanceof FragmentActivity); 
fragment_manager = ((FragmentActivity) ctx).getSupportFragmentManager(); 

उत्तर

24

मुझे लगता है कि क्या फाहा कहने की कोशिश कर रहा है कि ज़ोर बयान के लिए BuildConfig.DEBUG का चेक जोड़ने है

अगर (BuildConfig.DEBUG)

ज़ोर (FragmentActivity instanceof ctx) ;

ताकि ज़ोर केवल काम करता है जब आप अनुप्रयोग का परीक्षण कर रहे हैं, लेकिन रिलीज पर संस्करणों

BuildConfig.DEBUG नहीं कहा जा जाएगा झूठी हो जाएगा जब आप एक रिहाई का निर्माण निर्यात पर जोर।

संपादित करें: ऐसा लगता है कि आप की तरह कुछ करना चाहिए नीचे के बजाय जोर

if(BuildConfig.DEBUG && !(ctx instanceof FragmentActivity)) 
     throw new RuntimeException(); 
ज़ोर के बजाय

का उपयोग कर।

स्रोत: http://tools.android.com/recent/androidstudio045released

कुछ नए फाहा चेक, और विशेष रूप से एक जो झंडे अभिकथन कीवर्ड का उपयोग करता है। यह डिवाइस पर भरोसेमंद काम नहीं करता है और आपको इसके बजाय सशर्त चेक करने के लिए BuildConfig.DEBUG का उपयोग करना चाहिए।

+1

लेकिन जोर() कोड डाल्विक पर पूरी तरह से लागू नहीं किया गया है/नहीं, इसलिए परीक्षण (एक एमुलेटर पर) चलाने पर भी, जोर देना() का उपयोग नहीं किया जाना चाहिए। –

+1

AFAIK, debug.assert = 1 system prop – nandeesh

+1

का उपयोग करके जोर दिया जा सकता है इस पोस्ट के अनुसार http://code.google.com/p/android/issues/detail?id=65183 "[assert()] कभी समर्थित नहीं था Dalvik में। प्रणाली की संपत्ति मौजूद है, लेकिन विभिन्न स्थानों पर काफी अनदेखा है। एक कारण है कि यह दस्तावेज या उपयोग करने में आसान नहीं है। " –

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