बैकग्राउंड सेवा बनाना

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 पर भेजने के बारे में इसमें बताया गया है बैकग्राउंड में काम करने वाली सेवा को काम के अनुरोध भेजना.