2012-06-24 22 views
6

मेरे पास IntentService कक्षा है जो जटिल अनुप्रयोगों - क्रियाकलापों, पृष्ठभूमि थ्रेड, अन्य सेवाओं में विभिन्न स्थानों से शुरू की जा सकती है। मैं इस बात का सामना करना चाहता हूं कि सेवा कितनी बार लागू की गई थी। मैं अपने इरादे सेवा वर्ग के भीतर एक निजी int चर का उपयोग करता हूं ताकि इसका ट्रैक रखा जा सके, मैं इसे onStartCommand(...) विधि से बढ़ाता हूं।एक इरादा सेवा है ऑनस्टार्ट कमांड (..) विधि धागा सुरक्षित है?

यह सिर्फ मेरे लिए हुआ, क्योंकि ऑनस्टार्ट कमांड (...) विधि को विभिन्न एसिंक्रोनस थ्रेड से कहा जा सकता है, यह शायद थ्रेड-सुरक्षित समाधान नहीं हो सकता है। तो सवाल यह है कि, क्या मुझे सिंक्रनाइज़ किए गए ब्लॉक में इस काउंटर वैरिएबल तक पहुंच को लपेटने की ज़रूरत है, या ऑनस्टार्ट कमांड (...) का इरादा सेवा कार्यान्वयन मेरे लिए इसका ख्याल रखता है?

एक नोट के रूप में, मुझे पता है कि मैं onHandleIntent(...) से चर को सुरक्षित रूप से बढ़ा सकता हूं, लेकिन मुझे वास्तविक अनुरोधों पर गिनती की आवश्यकता होगी, न कि निष्पादित इरादों पर।

उत्तर

14

यह सिर्फ मेरे लिए हुआ, क्योंकि ऑनस्टार्ट कमांड (...) विधि को विभिन्न एसिंक्रोनस थ्रेड से कहा जा सकता है, यह शायद थ्रेड-सुरक्षित समाधान नहीं हो सकता है।

onStartCommand() हमेशा किसी भी सेवा में मुख्य एप्लिकेशन थ्रेड पर कॉल किया जाता है। आप एक साथ दो धागे में onStartCommand() के साथ नहीं बुलाया जा सकता है।

+0

हर दिन नई चीजें सीखना। धन्यवाद! –

+0

तो यह धागा सुरक्षित नहीं है? – digitizedx

+0

@digitizedx: क्या ** ** धागा सुरक्षित नहीं है? 'ऑनस्टार्ट कमांड() 'है, जैसा कि इसे केवल मुख्य अनुप्रयोग धागे पर ही बुलाया जाता है। – CommonsWare