একটি ব্যাকগ্রাউন্ড পরিষেবা তৈরি করুন

IntentService ক্লাস একটি একক ব্যাকগ্রাউন্ড থ্রেডে একটি অপারেশন চালানোর জন্য একটি সরল কাঠামো প্রদান করে। এটি এটিকে আপনার ইউজার ইন্টারফেসের প্রতিক্রিয়াশীলতাকে প্রভাবিত না করেই দীর্ঘমেয়াদী ক্রিয়াকলাপ পরিচালনা করতে দেয়। এছাড়াও, একটি IntentService বেশিরভাগ ইউজার ইন্টারফেস লাইফসাইকেল ইভেন্ট দ্বারা প্রভাবিত হয় না, তাই এটি এমন পরিস্থিতিতে চলতে থাকে যা একটি AsyncTask বন্ধ করে দেয়

একটি IntentService কয়েকটি সীমাবদ্ধতা রয়েছে:

  • এটি আপনার ব্যবহারকারী ইন্টারফেসের সাথে সরাসরি যোগাযোগ করতে পারে না। এর ফলাফলগুলি UI-তে রাখতে, আপনাকে সেগুলিকে একটি Activity পাঠাতে হবে।
  • কাজের অনুরোধ ক্রমানুসারে চলে। যদি একটি ক্রিয়াকলাপ একটি IntentService এ চলছে, এবং আপনি এটিকে অন্য একটি অনুরোধ পাঠান, অনুরোধটি প্রথম অপারেশন শেষ না হওয়া পর্যন্ত অপেক্ষা করে৷
  • একটি IntentService চলমান একটি অপারেশন বাধা দেওয়া যাবে না.

যাইহোক, বেশিরভাগ ক্ষেত্রে একটি IntentService হল সাধারণ ব্যাকগ্রাউন্ড অপারেশন করার জন্য পছন্দের উপায়।

এই নির্দেশিকা আপনাকে নিম্নলিখিত জিনিসগুলি কীভাবে করতে হয় তা দেখায়:

  • IntentService এর আপনার নিজস্ব সাবক্লাস তৈরি করুন।
  • onHandleIntent() প্রয়োজনীয় কলব্যাক পদ্ধতি তৈরি করুন।
  • আপনার ম্যানিফেস্ট ফাইলে IntentService সংজ্ঞায়িত করুন।

ইনকামিং intents হ্যান্ডেল

আপনার অ্যাপের জন্য একটি IntentService উপাদান তৈরি করতে, একটি ক্লাস সংজ্ঞায়িত করুন যা IntentService প্রসারিত করে এবং এর মধ্যে, একটি পদ্ধতি সংজ্ঞায়িত করুন যা onHandleIntent() ওভাররাইড করে। উদাহরণ স্বরূপ:

কোটলিন

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
        ...
    }
}

জাভা

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 এ পাঠানোর পদ্ধতিটি ব্যাকগ্রাউন্ড পরিষেবাতে কাজের অনুরোধ পাঠান- এ বর্ণিত আছে।