के भीतर से अवरुद्ध संवाद मैं एक ऐप लिख रहा हूं जो मूल रूप से 250 के जेएनआई के आसपास एक रैपर है। जेएनआई (एक गेम इंजन) में एपीआई हैं जैसे हैंडल_पेनअप (इंट एक्स, इंट वाई)। कभी-कभी इसे उपयोगकर्ता को हैंडल_पेनअप() (जावा कोड में कॉलबैक के माध्यम से) से पूछताछ करने की आवश्यकता होती है, इसलिए क्वेरी को लागू करने के लिए मैं जिस संवाद का उपयोग करता हूं उसे ब्लॉक करना होगा।जेएनआई कोड
मैं समझता हूं कि निष्पादन का मुख्य धागा अवरुद्ध नहीं हो सकता है। तो मैंने एक दूसरा थ्रेड तैयार किया है जो सभी जेएनआई कॉल करता है जिसके परिणामस्वरूप कॉलबैक को अवरुद्ध करने की आवश्यकता होगी। उस दूसरे धागे के अंदर, जब मुझे अवरुद्ध संवाद करने की आवश्यकता होती है, तो मैं startActivityForResult() को कॉल करता हूं और फिर सेमेफोर पर() प्राप्त करता हूं। जब एक्टिविटी रिसेट() को मुख्य थ्रेड पर कॉल किया जाता है तो यह उसी सेमफोर पर रिलीज() को कॉल करता है।
यह काम करता है यदि मेरी क्वेरी एक नई गतिविधि के रूप में लागू की गई है, लेकिन यदि मैं मौजूदा गतिविधि के भीतर Dialog() नहीं दिखाना चाहता हूं। लॉग संदेश मुझे बताओ कि मेरे धागे को लूपर की जरूरत है। मैं एक जोड़ रहा हूं - और यह काम करता है कि यह काम करता है - लेकिन ऐसा लगता है जैसे मैं गलत रास्ते पर जा रहा हूं। मुझे जो अवरोध करना है, वह ब्लॉकिंग संवाद करने के लिए एक नुस्खा है (उपयोगी अगर केवल इसलिए कि हर दूसरे प्लेटफ़ॉर्म में उन्हें और इसलिए पोर्ट किया गया कोड अक्सर उस तरह से काम करेगा।)
गैर अवरुद्ध कब शायद बनाम रोकने में के रूप में ब्लॉक (कॉल जब तक वापस नहीं करता है आशा उसने अनुरोधित इनपुट प्राप्त किया है या असफल रहा है, बनाम तत्काल लौट रहा है और यदि कोई भी बफर में पहले से ही इनपुट कर रहा है तो रिपोर्टिंग) –