2017-01-07 6 views
7

एंड्रॉइड 6.0 से शुरू, रनटाइम पर अनुमतियां अनुरोध की जाती हैं, और स्थापना से पहले नहीं।शो अनुमति स्पष्टीकरण asynchronisly

एंड्रॉयड official doc निम्न कोड की सिफारिश की:

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.READ_CONTACTS)) { 

     // Show an explanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 
     // No explanation needed, we can request the permission. 
     ... 
    } 
} 

मैं ऊपर नमूना कोड में एक बात के बारे में उलझन में हूँ, यही कारण है कि टिप्पणी ऊपर कहते हैं, "उपयोगकर्ता एसिंक्रोनस रूप को एक विवरण दिखाएँ" है? क्या यह एक सम्मेलन का पालन करना है? मेरा मतलब है कि अगर मैं अनुमति देने की अनुमति देने के लिए एक संवाद पॉप अप करने की योजना बना रहा हूं, तो मुझे संवाद को अतुल्यकालिक रूप से पॉप अप करने की आवश्यकता दिखाई नहीं दे रही है। मुझे समझ में नहीं आता कि Google वहां एसिंक्रोनस कोड क्यों सुझाता है।

क्या यह इंगित करता है कि Google डेवलपर पॉपअप संवाद नहीं चाहता है लेकिन कुछ भारी कार्रवाई करें? हम्म ... वैसे भी, इस पर काफी उलझन में।

उत्तर

3

क्या यह एक सम्मेलन का पालन करना है?

यह सभी एंड्रॉइड ऐप विकास में एक मानक अवधारणा है, खासकर जब यूआई से निपटना। यह भी बहुत जरूरी है, क्योंकि एंड्रॉइड में सिंक्रोनस यूआई के लिए कोई एपीआई नहीं है।

मेरा मतलब है कि अगर मैं अनुमति देने की अनुमति देने के लिए एक संवाद पॉप अप करने की योजना बना रहा हूं, तो मुझे संवाद को अतुल्यकालिक रूप से पॉप अप करने की आवश्यकता दिखाई नहीं दे रही है।

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

एक तुल्यकालिक यूआई अगर बुला show() अपने कोड का एक संवाद अवरुद्ध आगे निष्पादन प्रदर्शित करने के लिए जब तक संवाद दूर चला गया हो सकता है, ताकि आप पता था कि क्या उपयोगकर्ता अगले स्टेटमेंट निम्नलिखित show() पर कि संवाद के साथ किया था।

+0

तो, जब संवाद के साथ स्पष्टीकरण दिखाते हैं, तो मुझे उदाहरण का उपयोग करने की आवश्यकता नहीं है। AysncTask संवाद पॉप अप करने के लिए क्योंकि यह पहले से ही एक असीमित कॉल है? –

+0

@ Leem.fin: आपको 'AsyncTask' जैसे पृष्ठभूमि थ्रेड से संवाद प्रदर्शित करने के लिए 'show()' को कॉल करने की आवश्यकता नहीं है। – CommonsWare

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