खोज…


वाक्य - विन्यास

  1. <सेवा Android: name = "। UploadS3IntentService" Android: export = "false" />

टिप्पणियों

एक IntentService पृष्ठभूमि थ्रेड पर कार्य को ऑफ़लोड करने का एक सरल तरीका प्रदान करता है। यह अनुरोधों के बारे में सब कुछ संभालता है, उन्हें एक कतार में रखना, खुद को रोकना, आदि। इसे लागू करना भी आसान है, इसका उपयोग करने के लिए सही समय है जब आपके पास समय लेने वाले संचालन हैं जो मुख्य (यूआई) धागे पर नहीं हैं।

एक इरादे का निर्माण

एक IntentService बनाने के लिए, एक वर्ग बनाएं जो IntentService विस्तार IntentService , और इसके भीतर, एक विधि जो onHandleIntent ओवरराइड onHandleIntent :

package com.example.myapp;
public class MyIntentService extends IntentService {
    @Override
     protected void onHandleIntent (Intent workIntent) {
         //Do something in the background, based on the contents of workIntent.
     }
}

नमूना आशय सेवा

यहां एक IntentService का एक उदाहरण है जो पृष्ठभूमि में छवियों को लोड करने का दिखावा करता है। IntentService को लागू करने के लिए आपको बस एक ऐसा कंस्ट्रक्टर देना होगा जो super(String) कंस्ट्रक्टर को कॉल करे, और आपको onHandleIntent(Intent) विधि को लागू करने की आवश्यकता है।

public class ImageLoaderIntentService extends IntentService {

    public static final String IMAGE_URL = "url";

    /**
     * Define a constructor and call the super(String) constructor, in order to name the worker
     * thread - this is important if you want to debug and know the name of the thread upon 
     * which this Service is operating its jobs.
     */
    public ImageLoaderIntentService() {
        super("Example");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // This is where you do all your logic - this code is executed on a background thread

        String imageUrl = intent.getStringExtra(IMAGE_URL);

        if (!TextUtils.isEmpty(imageUrl)) {
            Drawable image = HttpUtils.loadImage(imageUrl); // HttpUtils is made-up for the example
        }

        // Send your drawable back to the UI now, so that you can use it - there are many ways
        // to achieve this, but they are out of reach for this example
    }
}

IntentService शुरू करने के लिए, आपको इसे एक Intent भेजने की आवश्यकता है। आप एक Activity से ऐसा कर सकते हैं, उदाहरण के लिए। बेशक, आप उस तक सीमित नहीं हैं। यहाँ एक उदाहरण है कि आप अपनी नई Service को Activity वर्ग से कैसे बुलवाएँगे।

Intent serviceIntent = new Intent(this, ImageLoaderIntentService.class); // you can use 'this' as the first parameter if your class is a Context (i.e. an Activity, another Service, etc.), otherwise, supply the context differently
serviceIntent.putExtra(IMAGE_URL, "http://www.example-site.org/some/path/to/an/image");
startService(serviceIntent); // if you are not using 'this' in the first line, you also have to put the call to the Context object before startService(Intent) here

IntentService अपने से डाटा को संसाधित करता Intent रों क्रमिक रूप से, ताकि आप एक से अधिक भेज सकते हैं Intent चिंता है कि क्या वे एक दूसरे के साथ भिड़ना होगा बिना। एक समय में केवल एक Intent संसाधित होता है, बाकी एक कतार में चलते हैं। जब सभी नौकरियां पूरी हो IntentService , तो IntentService अपने आप बंद हो जाएगी।

मूल इरादे का उदाहरण

सार वर्ग IntentService सेवाओं के लिए एक आधार वर्ग है, जो किसी भी उपयोगकर्ता इंटरफ़ेस के बिना पृष्ठभूमि में चलता है। इसलिए, UI को अपडेट करने के लिए, हमें एक रिसीवर का उपयोग करना होगा, जो या तो एक BroadcastReceiver या एक ResultReceiver हो सकता है:

  • यदि आपकी सेवा को ऐसे कई घटकों के साथ संचार करने की आवश्यकता है, जो BroadcastReceiver का उपयोग किया जाना चाहिए।
  • एक ResultReceiver : का उपयोग किया जाना चाहिए यदि आपकी सेवा को केवल मूल एप्लिकेशन (यानी आपके आवेदन) के साथ संवाद करने की आवश्यकता है।

IntentService भीतर, हमारे पास एक प्रमुख तरीका है, onHandleIntent() , जिसमें हम सभी कार्य करेंगे, उदाहरण के लिए, सूचनाएं तैयार करना, अलार्म बनाना, आदि।

यदि आप अपनी खुद की IntentService का उपयोग करना चाहते हैं, तो आपको इसे निम्नानुसार विस्तारित करना होगा:

public class YourIntentService extends IntentService {
    public YourIntentService () {
        super("YourIntentService ");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO: Write your own code here.
    }
}    

गतिविधि को कॉल करना / शुरू करना निम्नानुसार किया जा सकता है:

Intent i = new Intent(this, YourIntentService.class);
startService(i);  // For the service.
startActivity(i); // For the activity; ignore this for now.

किसी भी गतिविधि के समान, आप अतिरिक्त जानकारी जैसे कि बंडल डेटा को इसके पास दे सकते हैं:

Intent passDataIntent = new Intent(this, YourIntentService.class);
msgIntent.putExtra("foo","bar");
startService(passDataIntent);

अब मान लें कि हमने YourIntentService वर्ग के लिए कुछ डेटा पास किया है। इस डेटा के आधार पर, एक कार्रवाई निम्नानुसार की जा सकती है:

public class YourIntentService extends IntentService {
    private String actvityValue="bar";
    String retrivedValue=intent.getStringExtra("foo");

    public YourIntentService () {
        super("YourIntentService ");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if(retrivedValue.equals(actvityValue)){
            // Send the notification to foo.
        } else {
            // Retrieving data failed.
        }    
    }
}

ऊपर दिए गए कोड से यह भी पता चलता है कि OnHandleIntent() विधि में बाधाओं को कैसे संभालना है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow