IntentService
क्लास, किसी एक बैकग्राउंड थ्रेड पर कोई कार्रवाई करने के लिए, आसान स्ट्रक्चर उपलब्ध कराती है. इससे, आपके यूज़र इंटरफ़ेस के रिस्पॉन्स पर असर डाले बिना, यह लंबे समय तक चलने वाली
कार्रवाइयों को मैनेज कर पाता है. साथ ही, IntentService
पर ज़्यादातर यूज़र इंटरफ़ेस लाइफ़साइकल इवेंट का असर नहीं पड़ता. इसलिए, यह उन स्थितियों में भी चलता रहता है जिनमें AsyncTask
बंद हो जाता है
IntentService
की कुछ सीमाएं हैं:
-
यह सीधे आपके यूज़र इंटरफ़ेस के साथ इंटरैक्ट नहीं कर सकता. इसके नतीजों को यूज़र इंटरफ़ेस (यूआई) में डालने के लिए, आपको उन्हें
Activity
पर भेजना होगा. -
काम के अनुरोध एक क्रम में पूरे होते हैं. अगर किसी
IntentService
में कोई कार्रवाई चल रही है और उसे दूसरा अनुरोध भेजा जाता है, तो अनुरोध पहली कार्रवाई के खत्म होने तक इंतज़ार करता है. -
IntentService
पर चल रही किसी कार्रवाई को बीच में रोका नहीं जा सकता.
हालांकि, ज़्यादातर मामलों में बैकग्राउंड में आसान कार्रवाइयां करने के लिए, IntentService
का इस्तेमाल करना सबसे सही होता है.
इस गाइड में, ये काम करने का तरीका बताया गया है:
IntentService
की अपनी खुद की सब-क्लास बनाएं.- ज़रूरी कॉलबैक तरीका
onHandleIntent()
बनाएं. - अपनी मेनिफ़ेस्ट फ़ाइल में
IntentService
की जानकारी दें.
नए इंटेंट मैनेज करें
अपने ऐप्लिकेशन के लिए IntentService
कॉम्पोनेंट बनाने के लिए, ऐसी क्लास तय करें जो
IntentService
को एक्सटेंड़ करती हो. साथ ही, उसमें ऐसा तरीका तय करें जो
onHandleIntent()
को बदल दे. उदाहरण के लिए:
Kotlin
class RSSPullService : IntentService(RSSPullService::class.simpleName) override fun onHandleIntent(workIntent: Intent) { // Gets data from the incoming Intent val dataString = workIntent.dataString ... // Do work here, based on the contents of dataString ... } }
Java
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
ध्यान दें कि किसी सामान्य Service
कॉम्पोनेंट के दूसरे कॉलबैक, जैसे कि
onStartCommand()
, IntentService
से अपने-आप शुरू हो जाते हैं. IntentService
में, आपको इन
कॉलबैक को बदलने से बचना चाहिए.
IntentService
बनाने के बारे में ज़्यादा जानने के लिए, IntentService क्लास को बढ़ाना लेख पढ़ें.
मेनिफ़ेस्ट में इंटेंट सेवा तय करना
IntentService
के लिए, आपके ऐप्लिकेशन मेनिफ़ेस्ट में भी एंट्री की ज़रूरत होती है.
इस एंट्री को
<service>
एलिमेंट के तौर पर दें, जो
<application>
एलिमेंट का चाइल्ड
हो:
<application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... </application>
android:name
एट्रिब्यूट, IntentService
की क्लास का नाम बताता है.
ध्यान दें कि
<service>
एलिमेंट में
इंटेंट फ़िल्टर नहीं होता. इस
सेवा को काम के अनुरोध भेजने वाला
Activity
,
साफ़ तौर पर Intent
का इस्तेमाल करता है. इसलिए, किसी फ़िल्टर की ज़रूरत नहीं है. इसका यह भी मतलब है कि एक ही ऐप्लिकेशन या एक ही उपयोगकर्ता आईडी वाले दूसरे ऐप्लिकेशन के कॉम्पोनेंट ही इस सेवा को ऐक्सेस कर सकते हैं.
अब आपके पास बेसिक IntentService
क्लास है, इसलिए इसे
Intent
ऑब्जेक्ट की मदद से काम के अनुरोध भेजे जा सकते हैं. इन ऑब्जेक्ट को बनाने और उन्हें अपने IntentService
पर भेजने का तरीका, बैकग्राउंड सेवा को वर्क रिक्वेस्ट भेजना में बताया गया है.