मैं एक एंड्रॉइड ऐप पर काम कर रहा हूं जो उपयोग करता है try/catch अक्सर ऐसे स्थानों पर दुर्घटनाग्रस्त होने से बचाने के लिए जहां कोई आवश्यकता नहीं है। उदाहरण के लिए,
इसके xml layoutसाथ एक दृश्य id = toolbarसंदर्भित है:
// see new example below, this one is just confusing
// it seems like I am asking about empty try/catch
try {
View view = findViewById(R.id.toolbar);
}
catch(Exception e) {
}
इस दृष्टिकोण का उपयोग पूरे ऐप में किया जाता है। स्टैक ट्रेस मुद्रित नहीं है और जो गलत हुआ उसे ढूंढना वास्तव में कठिन है। ऐप बिना किसी स्टैक ट्रेस को प्रिंट किए अचानक बंद हो जाता है।
मैंने अपने सीनियर से उसे समझाने के लिए कहा और उसने कहा,
यह उत्पादन में दुर्घटना को रोकने के लिए है।
मैं इससे पूरी तरह असहमत हूं । मेरे लिए यह क्रैश से ऐप्स को रोकने का तरीका नहीं है। यह उस डेवलपर को दिखाता है को पता नहीं है कि वह क्या कर रहा है और वह संदेह में है।
क्या एंटरप्राइज़ ऐप्स को क्रैश से रोकने के लिए उद्योग में इसका उपयोग किया जा रहा है?
अगर try/catch वास्तव में, वास्तव में हमारी आवश्यकता है तो क्या यूआई थ्रेड या अन्य थ्रेड्स के साथ एक अपवाद हैंडलर संलग्न करना और वहां सब कुछ पकड़ना संभव है? यदि संभव हो तो यह एक बेहतर तरीका होगा।
हां, खाली try/catchखराब है और अगर हम सर्वर पर स्टैक ट्रेस या लॉग अपवाद को प्रिंट करते हैं, तो try/catchसभी एप्लिकेशन में यादृच्छिक रूप से कोड के ब्लॉक लपेटने से मुझे कोई मतलब नहीं है जैसे कि जब प्रत्येक फ़ंक्शन एक में संलग्न है try/catch।
अपडेट करें
जैसा कि इस प्रश्न पर बहुत ध्यान दिया गया है और कुछ लोगों ने इस प्रश्न का गलत अर्थ निकाला है (शायद इसलिए कि मैंने इसे स्पष्ट रूप से प्रकाशित नहीं किया है) मैं इसे फिर से समझने जा रहा हूं।
यहाँ डेवलपर्स क्या कर रहे हैं
एक फ़ंक्शन लिखित और परीक्षण किया जाता है , यह एक छोटा सा फ़ंक्शन हो सकता है जो केवल विचारों या एक जटिल को शुरू करता है, परीक्षण के बाद इसे
try/catchब्लॉक के चारों ओर लपेटा जाता है। यहां तक कि फ़ंक्शन के लिए जो कभी भी कोई अपवाद नहीं फेंकेंगे।इस अभ्यास का उपयोग पूरे अनुप्रयोग में किया जाता है। कुछ समय स्टैक ट्रेस मुद्रित किया जाता है और कभी-कभी
debug logकुछ यादृच्छिक त्रुटि संदेश के साथ। यह त्रुटि संदेश डेवलपर से डेवलपर तक भिन्न होता है।इस दृष्टिकोण के साथ, ऐप क्रैश नहीं करता है लेकिन ऐप का व्यवहार अनिर्धारित हो जाता है। यहां तक कि कुछ समय के लिए यह पालन करना कठिन है कि क्या गलत हुआ।
मैं जो वास्तविक प्रश्न पूछ रहा हूं, वह था; क्या यह उद्योग में दुर्घटनाओं से होने वाले उद्यम अनुप्रयोगों को रोकने के लिए पालन किया जा रहा है? और मैं खाली कोशिश / कैच के बारे में नहीं पूछ रहा हूं । क्या यह पसंद है, उपयोगकर्ताओं को एप्लिकेशन से प्यार है जो उन अनुप्रयोगों से दुर्घटना नहीं करता है जो अप्रत्याशित रूप से व्यवहार करते हैं? क्योंकि यह वास्तव में इसे या तो क्रैश करने के लिए उकसाता है या उपयोगकर्ता को रिक्त स्क्रीन के साथ पेश करता है या व्यवहार उपयोगकर्ता इससे अनजान है।
मैं यहाँ वास्तविक कोड से कुछ स्निपेट पोस्ट कर रहा हूँ
private void makeRequestForForgetPassword() { try { HashMap<String, Object> params = new HashMap<>(); String email= CurrentUserData.msisdn; params.put("email", "blabla"); params.put("new_password", password); NetworkProcess networkProcessForgetStep = new NetworkProcess( serviceCallListenerForgotPasswordStep, ForgotPassword.this); networkProcessForgetStep.serviceProcessing(params, Constants.API_FORGOT_PASSWORD); } catch (Exception e) { e.printStackTrace(); } } private void languagePopUpDialog(View view) { try { PopupWindow popupwindow_obj = popupDisplay(); popupwindow_obj.showAsDropDown(view, -50, 0); } catch (Exception e) { e.printStackTrace(); } } void reloadActivity() { try { onCreateProcess(); } catch (Exception e) { } }
यह सर्वोत्तम प्रथाओं को संभालने वाले एंड्रॉइड अपवाद का डुप्लिकेट नहीं है , वहां ओपी इस प्रश्न से अलग उद्देश्य के लिए अपवाद को पकड़ने की कोशिश कर रहा है ।
catch(Exception e){}- इस टिप्पणी ने सवाल को संपादित करने से पहले समझ में आया