Background Service — এটি কি, প্রকার ও Android এ কিভাবে কাজ করে

লেখক: IT Sectr প্রকাশিত: 2026-03-27 পড়ার সময়: 8 মিনিট

Background Service একটি Android উপাদান যা ব্যবহারকারী ইন্টারফেস ছাড়া পেছনে দীর্ঘ অপারেশন চালানোর জন্য ডিজাইন করা হয়েছে। Activity র বিপরীতে, Service এপ্লিকেশন ছোট হলেও বা ব্যবহারকারী অন্য এপ্লিকেশনে স্যিচ করলেও কাজ চালিয়ে যায়। Android Developers, 2026 অনুযায়ী, তিন ধরনের সার্ভিস আছে: Started Service, Bound Service এবং Foreground Service, প্রত্যেকটির নিজস্ব জীবনচক্র এবং ব্যবহারের পরিধি রয়েছে।

মূখ্য বিষয়সমূহ

  • Background Service একটি Android উপাদান যা UI ছাড়া পেছনের কাজের জন্য, যেকোনো কার্যকলাপ থেকে স্বতন্ত্রভাবে কাজ করে।
  • Started Service startService এর মাধ্যমে শুরু হয় এবং stopSelf এর মাধ্যমে স্পষ্টভাবে বন্ধ না করা পর্যন্ত চলে।
  • Bound Service bindService এর মাধ্যমে একটি উপাদানের সাথে আবদ্ধ হয় এবং যতক্ষণ গ্রাহক সংযুক্ত আছে ততক্ষণ চলে।
  • Foreground Service একটি স্থায়ী বিজ্ঞপ্তি প্রদর্শন করে এবং কম ব্যাটারিতে সিস্টেম এটিকে বন্ধ করে না।
  • Android 8 থেকে পেছনের সার্ভিসগুলির পেছনে শুরুর জন্য কড়া প্রতিবন্ধ রয়েছে।

Android এ Background Service কি?

Background Service (বা শুধু Service) Activity, BroadcastReceiver এবং ContentProvider এর পাশাপাশি একটি Android এপ্লিকেশনের চারটি মৌলিক উপাদানের একটি। Activity এর বিপরীতে, Service এর কোনও ভিজুয়াল ইন্টারফেস নেই এবং এপ্লিকেশন সামনে থাকুক বা না থাকুক যে কাজগুলি চালিয়ে যাওয়া উচিত সেগুলি করার জন্য ডিজাইন করা হয়েছে।

Service এপ্লিকেশনের মূল থ্রেডে চলে, তাই এর মধ্যে যেকোনো ব্লকিং অপারেশনের জন্য একটি পৃথক থ্রেড তৈরি করা প্রয়োজন। যদি এটি না করা হয়, তবে সিস্টেম ANR (Application Not Responding) ছুড়ে দেবে। সরল পেছনের কাজের জন্য, Android IntentService প্রদান করে যা স্বচালিতভাবে একটি ওয়ার্কার থ্রেড তৈরি করে। আধুনিক প্রকল্পগুলিতে, মূল থ্রেড অবরুদ্ধ না করে অসিংক্রোনাস প্রক্রিয়াকরণের জন্য Service এর মধ্যে CoroutineScope সহ Kotlin কোরুটিন ব্যবহার করার পরামর্শ দেওয়া হয়।

Service এর মূল উদ্দেশ্য হল সংগীত বাজানো, ফাইল ডাউনলোড করা, নেটওয়ার্ক অনুরোধ পরিচালনা, ডেটা সিংক এবং অন্যান্য কাজ যা ব্যবহারকারী এপ্লিকেশন থেকে বেরিয়ে গেলেও চালিয়ে যাওয়া উচিত। তবে, Android 8 থেকে, ডিভেলপারদের পেছনের কাজের প্রতিবন্ধগুলি মনে রেখে সার্ভিসের ধরনগুলির মধ্যে সতর্কতার সাথে নির্বাচন করতে হবে।

Service এর জীবনচক্র কিভাবে কাজ করে?

Service এর নিজস্ব জীবনচক্র আছে যা Activity এর চক্রের চেয়ে আলাদা। এটিতে চারটি মূল পদ্ধতি আছে: onCreate, onStartCommand, onBind এবং onDestroy। মেমরি লিক ছাড়া পেছনের কাজগুলি সঠিকভাবে বাস্তবায়নের জন্য এই চক্র বোঝা অপরিহার্য।

onCreate এবং onStartCommand

onCreate পদ্ধতিটি সার্ভিস তৈরির সময় একবার ডাকা হয়। এখানে টাইমার, ডেটাবেস সংযোগ এবং সকেটের মতো সংশ্লিষ্টিগুলি আরম্ভ করা হয়। onStartCommand পদ্ধতিটি startService এর প্রতিবার ডাকা হয়, যা ইতিমধ্যে চলমান সার্ভিসে আদেশ প্রেরণের অনুমতি দেয়। রিটার্ন মান পুনরারম্ভে সিস্টেমের আচরণ নির্ধারণ করে।

kotlin
class DownloadService : Service() {

    override fun onCreate() {
        super.onCreate()
        initializeDownloader()
    }

    override fun onStartCommand(
        intent: Intent?,
        flags: Int,
        startId: Int
    ): Int {
        downloadFile(intent?.getStringExtra("url"))
        return START_STICKY
    }

    override fun onBind(intent: Intent): IBinder? = null
}

onBind এবং onDestroy

onBind bindService এর মাধ্যমে সার্ভিস আবদ্ধ করার সময় ডাকা হয় এবং গ্রাহক মিথস্থাপনের জন্য একটি IBinder অবজেক্ট ফেরত দেয়। এই পদ্ধতিটি শুধুমাত্র Bound Service এর জন্য ব্যবহৃত হয়। onDestroy হল সার্ভিস ধ্বংসের আগের শেষ কল । এখানে সকল সংশ্লিষ্টি মুক্ত করা হয়, থ্রেড বন্ধ করা হয় এবং কাজ বাতিল করা হয়।

পেছনের সার্ভিসের প্রকার

Android তিন ধরনের Service প্রদান করে, প্রত্যেকটি নিজস্ব পরিদৃশ্যের জন্য ডিজাইন করা হয়েছে। ভুল ধরন নির্বাচন এপ্লিকেশনের অস্থির আচরণ বা ব্যাটারি খরচের কারণ হতে পারে।

Started Service

Started Service startService কল করে শুরু হয় এবং stopSelf বা stopService কল করা পর্যন্ত চলে। এটি সেই কাজের জন্য উপযুক্ত যা তাড়াতাড়ি করা দরকার: এনালিটিক্স পাঠানো, একটি ছবি প্রক্রিয়া করা, একটি ফাইল ডাউনলোড করা। কাজ শেষ হলে, সার্ভিস নিজেই বন্ধ হয়ে যায়।

Bound Service

Bound Service একটি ক্লাইন্ট-সার্ভার ইন্টারফেস প্রদান করে, যা Activity, Fragment বা অন্য উপাদানকে সার্ভিসের সাথে যোগাযোগ করতে দেয়। সার্ভিসটি ততক্ষণ চলে যতক্ষণ অন্তত একটি গ্রাহক সংযুক্ত আছে। যখন সকল গ্রাহক অসংযুক্ত হয়ে যায়, সার্ভিসটি ধ্বংস হয়ে যায়। Bound Service দ্বিপক্ষীয় যোগাযোগের প্রয়োজন হলে সুবিধাজনক: সংগীত প্লেয়ার, নেভিগেশন।

Foreground Service

Foreground Service হল স্টেটাস বারে একটি স্থায়ী বিজ্ঞপ্তি সহকারী একটি Started Service। সিস্টেম এমন একটি সার্ভিসকে সক্রিয় মনে করে এবং কম মেমরিতেও এটিকে বন্ধ করে না। সংগীত বাজানো, অডিয়ো রিকর্ডিং, লোকেশন ট্র্যাকিং এবং ব্যবহারকারীর জন্য গুরুত্বপূর্ণ অন্যান্য কাজের জন্য Foreground Service অপরিহার্য।

প্যারামিটারStartedBoundForeground
শুরুstartServicebindServicestartForeground
আয়ুstopSelf পর্যন্তযতক্ষণ গ্রাহক আছেstopForeground পর্যন্ত
বিজ্ঞপ্তিনেইনেইআবশ্যক
বন্ধ করা যায়হ্যাঁহ্যাঁনা
উদাহরণডাউনলোডপ্লেয়ারসংগীত

Service তৈরি এবং চালানো

Service তৈরি করা Service থেকে উত্তরাধিকার প্রাপ্ত একটি ক্লাস ঘোষণা করা এবং AndroidManifest.xml এ পঞ্জীকৃত করার মাধ্যমে শুরু হয়। ম্যানিফেস্টে পঞ্জীকরণ ছাড়া, সিস্টেম সার্ভিস শুরু করতে পারবে না, এবং startService এর যেকোনো কল একটি ব্যতিক্রমের কারণ হবে।

kotlin
// AndroidManifest.xml এ পঞ্জীকরণ
@SuppressLint("ForegroundServiceType")
class SyncService : Service() {

    override fun onStartCommand(
        intent: Intent?,
        flags: Int,
        startId: Int
    ): Int {
        startForeground(
            NOTIFICATION_ID,
            createNotification()
        )
        performSync(intent)
        return START_NOT_STICKY
    }
}

Activity বা Fragment থেকে সার্ভিস শুরু করতে, সার্ভিস ক্লাসের স্পষ্ট রিফারেন্স সহ একটি Intent ব্যবহার করা হয়। Android 8 থেকে শুরু করে, Foreground Service এর জন্য ম্যানিফেস্টে FOREGROUND_SERVICE অনুমতি প্রয়োজন।

kotlin
// Started Service শুরু করা
val intent = Intent(this, SyncService::class.java)
intent.putExtra("action", "sync")
startService(intent)

// Foreground Service শুরু করা (Android 8+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    startForegroundService(intent)
} else {
    startService(intent)
}

Android 8+ এ প্রতিবন্ধ

Android 8 থেকে শুরু করে (API 26), Google পেছনের সার্ভিসগুলির উপর কড়া প্রতিবন্ধ চাপিয়েছে। পেছনের সার্ভিস শুরু (যখন এপ্লিকেশন সামনে নেই) শুধুমাত্র ব্যতিক্রমী ক্ষেত্রে অনুমত: পুশ বিজ্ঞপ্তি পাওয়ার পর, ডিভাইস বূটের পর, বা JobScheduler এর মাধ্যমে।

যে দীর্ঘ কাজগুলির তাড়াতাড়ি করার প্রয়োজন নেই, সেগুলির জন্য WorkManager বা JobScheduler ব্যবহার করার পরামর্শ দেওয়া হয়। যদি একটি এপ্লিকেশনের প্রকৃতপক্ষে একটি চলমান সার্ভিসের প্রয়োজন হয়, তবে একমাত্র উপায় হল ব্যবহারকারীকে দেখানো যায় এমন একটি বিজ্ঞপ্তি সহ Foreground Service। পেছনে বিজ্ঞপ্তি ছাড়া একটি সার্ভিস শুরু করা সিস্টেম দ্বারা উপেক্ষিত হবে।

পিছনের সঙ্গতিতার জন্য JobIntentService

JobIntentService একটি বিশেষায়িত ক্লাস যা Android 5+ এ কাজ করার জন্য সাপোর্ট লাইব্রেরিতে আবির্ভূত হয়েছে। এটি IntentService (স্বচালিত ওয়ার্কার থ্রেড, অনুক্রমিক প্রক্রিয়াকরণ) এর আচরণকে JobScheduler এর মাধ্যমে শেডিউলিং এর সাথে সম্পর্কিত করে। Android 8+ এ, JobIntentService অন্তর্নিহিতভাবে JobScheduler ব্যবহার করে, এবং পুরনো সংস্করণগুলিতে একটি সাধারণ Service ব্যবহার করে। এটি অতিরিক্ত Android সংস্করণ যাচাই ছাড়া পেছনের কাজগুলির এককীয় পরিচালনার অনুমতি দেয়।

kotlin
class UploadJobService : JobIntentService() {

    companion object {
        private const val JOB_ID = 1000

        fun enqueueWork(context: Context, work: Intent) {
            enqueueWork(
                context,
                UploadJobService::class.java,
                JOB_ID,
                work
            )
        }
    }

    override fun onHandleWork(intent: Intent) {
        val fileUri = intent.getStringExtra("file_uri")
        // একটি পেছনের থ্রেডে চলে
        uploadFile(fileUri)
    }
}

Service এ মেমরি পরিচালনা এবং লিক

Background Service এর সাথে কাজ করার সময় একটি সাধারণ সমস্যা হল মেমরি লিক। যেহেতু একটি Service একটি Activity এর চেয়ে দীর্ঘস্থায়ী হতে পারে, Service এর মধ্যে Activity এর রিফারেন্স (listener, callback বা broadcast এর মাধ্যমে) UI উপাদানগুলির আবজেক্ট গ্রহণ প্রতিরোধ করে। Service-থেকে-UI যোগাযোগের জন্য WeakReference, ViewModel বা LiveData ব্যবহার করার পরামর্শ দেওয়া হয়। onDestroy এ, সকল সবস্ক্রিপশন বাতিল করতে, থ্রেড বন্ধ করতে এবং কার্সার বন্ধ করতে ভুলবেন না।

Service বাম WorkManager: কোনটি কব বাছবেন

Background Service এবং WorkManager এর মধ্যে নির্বাচন পরিদৃশ্যের উপর নির্ভর করে। Service সেই কাজের জন্য উপযুক্ত যা তাড়াতাড়ি এবং অবিচ্ছিন্নভাবে চলতে হবে: সংগীত বাজানো, অডিয়ো রিকর্ডিং, GPS ট্র্যাকিং। WorkManager বিলম্বিত, গারন্টিড কাজের জন্য উপযুক্ত: সিংক, এনালিটিক্স পাঠানো, লগ আপলোড করা। WorkManager ডিভাইস রিবূট টিকে ও টিকে থাকে, কিন্তু Service থাকে না। Service একটি বিজ্ঞপ্তি সহ Foreground হতে পারে, যেখানে WorkManager পেছনে চুপচাপ কাজ করে। ব্যবহারিক দৃষ্টিকোণে, ডিভেলপাররা উভয় পদ্ধতি সমন্বিত করে: ব্যবহারকারীর জন্য গুরুত্বপূর্ণ কাজের জন্য Foreground Service এবং পেছনের রক্ষণাবেক্ষণের জন্য WorkManager।

Android 12 android:foregroundServiceType ফ্ল্যাগ চালু করেছে, যার জন্য সার্ভিসের ধরন নির্দিষ্ট করা প্রয়োজন: dataSync, camera, connectedDevice, location, mediaPlayback এবং অন্যান্য। ভুল ধরন নির্দিষ্টিকরণ শুরুতে একটি ব্যতিক্রমের কারণ হয়। এই প্রথা Background Service কে ব্যবহারকারী এবং সিস্টেম উভয়ের জন্য আরও স্বচ্ছ করে তোলে।

AndroidManifest এ Service পঞ্জীকরণের উদাহরণ

ম্যানিফেস্টে Service এর সঠিক পঞ্জীকরণে exported বৈশিষ্ট্য (বাহ্যিক এপ্লিকেশনের জন্য উপলব্ধতা), foregroundServiceType (Android 12+ এ পেছনের সার্ভিসের ধরন) এবং অনুমতি অন্তর্ভুক্ত থাকে। Bound Service এর জন্য, JobIntentService এর জন্য android:permission="android.permission.BIND_JOB_SERVICE" ঘোষণা করা প্রয়োজন। ম্যানিফেস্টে পঞ্জীকরণ ছাড়া, যেকোনো startService বা bindService কল একটি ব্যতিক্রম ছুড়ে দেবে, তাই Service-সম্পর্কিত সমস্যা নির্ণয়ের সময় ম্যানিফেস্ট যাচাই হল প্রথম পদক্ষেপ।

সাধারণ প্রশ্নাবলী

Service ডিফল্ট কোন থ্রেডে চলে?

Service এপ্লিকেশনের মূল থ্রেড (UI Thread) এ চলে। onStartCommand বা onHandleIntent এর মধ্যে যেকোনো ব্লকিং অপারেশন একটি পৃথক থ্রেড বা কোরুটিনে সরানো উচিত, অন্যথা সিস্টেম 5 সেকেন্ড পর ANR ছুড়ে দেবে।

একটি সাধারণ Service থেকে IntentService কিভাবে আলাদা?

IntentService হল Service এর একটি উপবর্গ যা স্বচালিতভাবে একটি ওয়ার্কার থ্রেড তৈরি করে এবং আদেশগুলি অনুক্রমিকভাবে প্রক্রিয়া করে। শেষ কাজটি সম্পূর্ণ করার পর, IntentService নিজেই বন্ধ হয়ে যায়। Android 8 থেকে শুরু করে, IntentService কে JobIntentService বা WorkManager এর পক্ষে অপরচিত বলা হয়।

আপি কি Android 12 এ এপ্লিকেশন পেছনে থাকার সময় Service শুরু করতে পারেন?

Android 12 এ পেছনে থেকে Started Service শুরু করা নিষিদ্ধ। ব্যতিক্রম হল ম্যানিফেস্টে ঘোষিত foregroundServiceType এবং একটি বৈধ বিজ্ঞপ্তি সহ Foreground Service। একটি উচ্চ-অগ্রাধিকারসম্পন্ন FCM বার্তা পাওয়ার পর একটি সংক্ষিপ্ত শুরুও অনুমত।

কিভাবে Service থেকে Activity এ ডেটা পাঠাবেন?

তিনটি পদ্ধতি আছে: স্থানীয় প্রচারের সাথে BroadcastReceiver, Handler এর মাধ্যমে Messenger প্রক্রিয়া, এবং একটি সাধারণ ViewModel সহ MVVM আর্কিটেক্চারে LiveData/Flow। Bound Service এর জন্য, IBinder সরাসরি পদ্ধতি কলের সাথে ব্যবহৃত হয়।

Service চলছিল এবং এপ্লিকেশন পুনরারম্ভ হলে কি হবে?

যদি Service টি START_STICKY ফ্ল্যাগ দিয়ে শুরু করা হয়েছিল, তবে কম মেমরির কারণে প্রক্রিয়া নষ্ট হওয়ার পর সিস্টেম এটি পুনরারম্ভ করবে। START_NOT_STICKY ফ্ল্যাগের অর্থ হল সিস্টেম সার্ভিসটি পুনরারম্ভ করবে না। START_REDELIVER_INTENT START_STICKY এর অনুরূপ কিন্তু শেষ Intent টি প্রদান করে।

সারাংশ

  • Background Service একটি Android উপাদান যা UI ছাড়া পেছনের কাজের জন্য, মূল থ্রেডে চলে।
  • তিন ধরন — Started, Bound এবং Foreground — বিভিন্ন পরিদৃশ্য কভার করে, এককালিক কাজ থেকে বিজ্ঞপ্তি সহ নিরন্তর কাজ পর্যন্ত।
  • জীবনচক্র এর মধ্যে onCreate, onStartCommand, onBind এবং onDestroy অন্তর্ভুক্ত আছে — onDestroy এ সংশ্লিষ্টি মুক্ত করা গুরুত্বপূর্ণ।
  • Foreground Service একমাত্র ধরন যা Android 8+ এ সিস্টেম দ্বারা বন্ধ হওয়ার ঝুকি ছাড়া নির্ভরাবে কাজ করে।
  • WorkManager এবং JobScheduler বিলম্বিত এবং গারন্টিড পেছনের কাজের জন্য উপযুক্ত।
  • Service ব্যবহার করবেন না সেই কাজের জন্য যার সঠিক সময় নিষ্পাদন প্রয়োজন — বদলে AlarmManager ব্যবহার করুন।
  • সবসময় পঞ্জীকৃত করুন Service কে AndroidManifest.xml এ এবং Android 12+ এ android:foregroundServiceType নির্দিষ্ট করুন।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন