2011-10-17 8 views
7

जब AsyncTask समाप्त हो गया है तो प्रगति संवाद को खारिज कर रहा हूं। क्या मुझे यह जांचना चाहिए कि इसे खारिज करने से पहले दिखा रहा है?क्या मुझे यह जांचना चाहिए कि प्रोग्रेसबार इसे खारिज करने से पहले दिखा रहा है या नहीं?

मैंने इस चेक को हटाने का प्रयास किया है और यह सामान्य रूप से काम करता है, लेकिन क्या छुपा जाल हो सकता है?

if (progressDialog.isShowing()) { 
    progressDialog.dismiss(); 
} 

उत्तर

2

Is लगता है कि कार्यान्वयन के अंदर चेक किया गया है:

public void dismiss() { 
    if (Thread.currentThread() != mUiThread) { 
     mHandler.post(mDismissAction); 
    } else { 
     mDismissAction.run(); 
    } 
} 

private void dismissDialog() { 
    if (mDecor == null || !mShowing) { 
     return; 
    } 

    try { 
     mWindowManager.removeView(mDecor); 
    } finally { 
     mDecor = null; 
     mWindow.closeAllPanels(); 
     onStop(); 
     mShowing = false; 

     sendDismissMessage(); 
    } 
} 
8

आपको इसे बर्खास्त करने के लिए दिखाया जाना चाहिए। यदि आप चेक करने के लिए जांच नहीं करते हैं तो यह केवल खारिज कर देगा() प्रगति पट्टी दिखाई नहीं दे रहा है।

लेकिन IsShowing की जांच करना एक अच्छा अभ्यास है। तो यह इसके लिए जांच जारी रखने के लिए चोट नहीं होगा।

0

यदि आपके पास केवल आपके कोड में एक स्थान है जहां dismiss() कहा जाता है, तो नहीं। आपको पता होना चाहिए कि उस समय संवाद दिखा रहा है या नहीं।

हालांकि मुझे प्रोग्रेसडिअलॉग और अभिविन्यास परिवर्तन के साथ कुछ समस्याएं हुई हैं, जिसके कारण एक से अधिक स्थानों की आवश्यकता होती है जहां संवाद संभावित रूप से खारिज कर दिया जाएगा, इस प्रकार isShowing() की जांच की आवश्यकता है।

0

source code जांचें, अगर यह कोड में संभाला जाता है तो आपको चिंता करने की ज़रूरत नहीं है। यदि कोई हैंडलिंग नहीं की जाती है तो यह अधिक जोखिम भरा-लेकिन-तेज़ या धीमा-लेकिन-सुरक्षित वातावरण बनाने का विकल्प है।

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

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