2010-11-30 12 views
61

मैं एक BroadcastReceiver जो हर बार कहा जाता है, और मैंने देखा है कई लोग अपने रिसीवर मेंक्या मुझे अपने रिसीवर में एंड्रॉइड: प्रक्रिया = ": रिमोट" का उपयोग करना चाहिए?

android: process =":remote" 

का उपयोग करें। मेरा उपयोग कुछ चीजों की जांच करने के लिए किया जाता है और यदि शर्तों का मिलान होता है तो अलार्म सक्रिय करें। मेरा सवाल यह है कि क्या मैंने अपने मैनिफेस्ट में ऊपर पोस्ट की गई लाइन का उपयोग करना चाहिए? और यदि ऐसा है तो ऐसा करने के क्या फायदे हैं?

+0

किस संदर्भ में (गतिविधि, सेवा इत्यादि) रिसीवर परिभाषित किया गया है? – Pentium10

+0

रिसीवर को मैनिफेस्ट में परिभाषित किया गया है, इसे एंड्रॉइड की अलार्ममेनगर उपयोगिता से कहा जाता है। – Jason

उत्तर

146

android:process=":remote" के साथ अपने रिसीवर को परिभाषित करके आप मूल रूप से एक अलग प्रक्रिया (= वीएम) में अपना रिसीवर चलाते हैं। सामान्य उपयोग-मामलों के लिए, आपको इसे एक अलग प्रक्रिया में चलाने की आवश्यकता नहीं है, और जो कुछ भी आप करना चाहते हैं, वह शायद स्थानीय रूप से ठीक से चल सकता है (आपकी एपीके प्रक्रिया में)।

android:process=":remote" का उपयोग करने की कमी यह है कि आपको चलाने के लिए अतिरिक्त संसाधनों की आवश्यकता है (इस मामले में एक अलग प्रक्रिया)। ऐसा करने पर, आप मूल रूप से 2 वीएम से निपट रहे हैं, और सिंगलटन जैसे कुछ पैटर्न, स्थिर फ़ील्ड अब आपके ऐप और आपकी रिमोट सेवा के बीच साझा नहीं किए जा सकते हैं।

android:process=":remote" का उपयोग करने का लाभ यह है कि कुछ उपयोग-मामलों के लिए, एक सेवा शुरू करने के लिए आसान हो सकता है जो आपके आवेदन को बंद करने के बाद चल रहा है (या अपनी प्रक्रिया में), या यदि आप दूरस्थ ग्राहकों को चाहते हैं अपनी सेवा से बांधने में सक्षम होने के लिए। onReceive() विधि को कॉल करने पर एक अलग प्रक्रिया में चलते समय आपका प्रसारण रिसीवर आपके अनुप्रयोगों को मुख्य थ्रेड को अवरुद्ध नहीं करेगा (हालांकि, इसे लागू करने के अन्य तरीके हैं)।

मुझे पता चला है कि अधिकांश समय, सबसे सामान्य उपयोग-मामलों के लिए, आप android:process=":remote" का उपयोग किए बिना दूर हो सकते हैं।

+3

ग्रेट धन्यवाद, वास्तव में मुझे स्पष्टीकरण की आवश्यकता है – Jason

+0

क्या मैं पूछ सकता हूं कि एक गैर-अवरोधक अपरिवर्तनीय() विधि को लागू करने के अन्य तरीकों से आप क्या कह रहे हैं? मैं वास्तव में वास्तव में उस परिदृश्य पर चल रहा हूं, एक वास्तविक तरीका जो वास्तव में कुछ काम करता है और मुझे संदेह है कि मेरे सॉफ़्टवेयर में कुछ समस्याएं हो सकती हैं ... – TiGer

+0

एक अन्य निहित लाभ है जिसका उल्लेख नहीं किया गया है: घटक चलाते समय एक अलग प्रक्रिया पर, आपके पास उपयोग करने के लिए एक नया नया वीएम ढेर है। इसलिए यदि आपका एप्लिकेशन स्मृति तीव्र संचालन कर रहा है, तो एक अलग प्रक्रिया मेमोरी त्रुटियों से बचने का समाधान हो सकती है। –