Foreground Service एक Android सेवा है जो उपयोगकर्ता को दिखाई देने वाली अनिवार्य सूचना के साथ स्टेटस बार में लंबे समय तक चलने वाले कार्य करता है। Background Service के विपरीत, जिसे सिस्टम संसाधनों की कमी होने पर रोक सकता है, Foreground Service उच्च प्राथमिकता प्राप्त करता है और सीमित मेमोरी की स्थिति में भी काम करता रहता है। Android Developers, 2025 के अनुसार, Foreground Service Android 12 और उससे नए संस्करणों पर लंबे कार्यों को करने का एकमात्र विश्वसनीय तरीका बना हुआ है।
मुख्य बातें
Foreground Service एक Android घटक है जो उन कार्यों को करने के लिए डिज़ाइन किया गया है जिनके बारे में उपयोगकर्ता जानता है और देख सकता है। यह नोटिफिकेशन पैनल में एक स्थायी सूचना प्रदर्शित करता है जिसे स्वाइप करके हटाया नहीं जा सकता — यह तब तक सक्रिय रहता है जब तक सेवा चल रही है। यह एक पृष्ठभूमि सेवा से मुख्य अंतर है, जो उपयोगकर्ता की जानकारी के बिना काम करती है।
Android सिस्टम Foreground Service को एक महत्वपूर्ण प्रक्रिया के रूप में मानता है। जब RAM कम होती है, तो प्लेटफ़ॉर्म पहले Background Services को समाप्त करता है, फिर कैश्ड की गई Activities को, और केवल असाधारण मामलों में — Foreground Service को। OOM Killer ऐसी सेवा को ADJ स्तर 2 प्रदान करता है, जो व्यावहारिक रूप से इसकी अनिवार्य समाप्ति को समाप्त कर देता है।
Foreground Service शुरू करने के लिए, डेवलपर को सेवा बनाने के बाद कुछ सेकंड के भीतर startForeground() विधि को कॉल करना होगा, अन्यथा सिस्टम एक ForegroundServiceDidNotStartInTimeException अपवाद फेंकेगा। यह प्लेटफ़ॉर्म की एक सख्त आवश्यकता है जो अघोषित पृष्ठभूमि कार्यों को रोकने के लिए शुरू की गई थी।
Foreground Service तंत्र पहले SDK के साथ Android 1.0 में शुरू किया गया था, लेकिन अनिवार्य सूचना Android 9 (API 28) में दिखाई दी। उससे पहले, कोई सेवा उपयोगकर्ता को दिखाई देने वाले संकेतक के बिना अग्रिम में चल सकती थी। Android 9 से शुरू करके, Google ने आवश्यकताओं को कड़ा किया: startForeground कॉल करने वाले किसी भी एप्लिकेशन को सेवा शुरू होने के 5 सेकंड के भीतर एक सूचना प्रदान करनी होगी।
Android 12 (API 31) में Foreground Service को background संदर्भ से शुरू करने पर प्रतिबंध लगाए गए — अब कई परिदृश्यों के लिए FOREGROUND_SERVICE_SPECIAL_USE अनुमति की आवश्यकता है। Android 14 (API 34) ने मेनिफ़ेस्ट में foregroundServiceType की अनिवार्य घोषणा शुरू की, जिससे सेवा आर्किटेक्चर अधिक पारदर्शी और पूर्वानुमानीय बन गया।
Foreground Service का कार्य तंत्र तीन मुख्य चरणों पर आधारित है: सेवा बनाना, सूचना को बांधना और कार्य को निष्पादित करना। सेवा Service वर्ग से विरासत पाती है और onStartCommand() विधि को ओवरराइड करती है, जिसमें एक पहचानकर्ता और Notification ऑब्जेक्ट के साथ startForeground() कॉल किया जाता है।
startForeground() कॉल करने के बाद, सिस्टम सेवा प्रक्रिया को उच्च उत्तरजीविता प्राथमिकता के साथ अग्रिम समूह में ले जाता है। इसका मतलब है कि Android RAM लोड की परवाह किए बिना प्रक्रिया को चलती रखने की कोशिश करेगा। Foreground Service को सामान्य परिस्थितियों में सिस्टम द्वारा नहीं रोका जा सकता — केवल उपयोगकर्ता द्वारा सूचना को हटाने पर या स्पष्ट रूप से stopSelf() कॉल करने पर।
Foreground Service का जीवन चक्र onCreate(), onStartCommand() और onDestroy() विधियों के माध्यम से प्रबंधित होता है। onStartCommand() में, डेवलपर प्रक्रिया के समाप्त होने के बाद पुनरारंभ रणनीति निर्धारित करता है — START_STICKY स्थिरांक सिस्टम को संसाधन पुनर्प्राप्ति के बाद सेवा को फिर से बनाने के लिए मजबूर करता है, जबकि START_NOT_STICKY स्वचालित पुनरारंभ को रोकता है।
Foreground Service शुरू होने पर, क्रमिक रूप से निम्न चरण निपटाए जाते हैं: startService() कॉल, onCreate() में Service ऑब्जेक्ट बनाना, onStartCommand() में Intent प्रोसेसिंग और Notification ऑब्जेक्ट के साथ startForeground() कॉल। यदि सेवा पहले से चल रही है और नया Intent आता है, तो केवल onStartCommand() फिर से बुलाया जाता है — onCreate() सेवा के जीवनकाल में केवल एक बार निष्पादित होता है।
Foreground Service को रोकना REMOVE_NOTIFICATION फ्लैग के साथ stopForeground() के माध्यम से होता है, जो स्टेटस बार से सूचना को छुपाता है। सूचना हटाने के तुरंत बाद, सिस्टम सेवा को अग्रिम नहीं मान सकता और इसकी प्राथमिकता घटाकर Background Service कर सकता है, जिससे प्रक्रिया समाप्ति के प्रति संवेदनशील हो जाती है।
PowerManager Foreground Service के संचालन में एक महत्वपूर्ण भूमिका निभाता है, क्योंकि Android के पावर सेविंग मोड (Doze, App Standby) कार्यों को निष्पादित करने की इसकी क्षमता को सीमित कर सकते हैं। अग्रिम स्थिति में होने पर भी, सेवा बैटरी नीतियों के अधीन है — नेटवर्क अनुरोधों में देरी हो सकती है और टाइमर Doze विंडो के साथ सिंक हो सकते हैं। विलंब के प्रति सहिष्णु लंबे संचालनों के लिए, WorkManager के साथ संयोजन में Foreground Service का उपयोग करने की सिफारिश की जाती है।
Android 14 (API 34) से शुरू करके, Google ने मेनिफ़ेस्ट में Foreground Service प्रकार की अनिवार्य घोषणा शुरू की। प्रत्येक प्रकार एक स्वीकृत उपयोग परिदृश्य को परिभाषित करता है — सिस्टम घोषित प्रकार और वास्तविक सेवा व्यवहार के बीच अनुरूपता की जाँच करता है। कुल मिलाकर 9 प्रकार हैं, लेकिन सबसे अधिक उपयोग किए जाने वाले निम्नलिखित हैं।
dataSync प्रकार डिवाइस और सर्वर के बीच डेटा सिंक करने, फ़ाइल ट्रांसफर और बैकअप के लिए डिज़ाइन किया गया है। उदाहरणों में क्लाउड स्टोरेज में फ़ोटो अपलोड करना, Firebase के साथ डेटाबेस सिंक करना या रिमोट सर्वर पर लॉग अपलोड करना शामिल है। इस प्रकार के लिए विशेषता android:foregroundServiceType="dataSync" के माध्यम से मेनिफ़ेस्ट में औचित्य निर्दिष्ट करना अनिवार्य है।
mediaPlayback प्रकार का उपयोग पृष्ठभूमि में ऑडियो और वीडियो चलाने के लिए किया जाता है — संगीत प्लेयर, पॉडकास्ट क्लाइंट, वीडियो प्लेयर। यह एकमात्र प्रकार है जो उपयोगकर्ता हस्तक्षेप के बिना अनिश्चित रूप से चल सकता है। नोटिफिकेशन चैनल में उच्च प्राथमिकता होनी चाहिए और MediaStyle के माध्यम से प्लेबैक नियंत्रण बटन प्रदर्शित करने चाहिए — प्ले, पॉज़, अगला, पिछला।
location प्रकार जियोलोकेशन सेवाओं के लिए है — नेविगेशन ऐप, गतिविधि ट्रैकिंग, जियोफ़ेंसिंग। Android 14+ के लिए FOREGROUND_SERVICE_LOCATION अनुमति की घोषणा करना और मेनिफ़ेस्ट में प्रकार निर्दिष्ट करना आवश्यक है। एप्लिकेशन के पास रनटाइम में एक सक्रिय स्थान अनुमति होनी चाहिए, अन्यथा सिस्टम सेवा शुरू करने से इनकार कर देगा।
| प्रकार | अनुमति | उपयोग उदाहरण |
|---|---|---|
| dataSync | FOREGROUND_SERVICE_DATA_SYNC | क्लाउड के साथ फ़ाइल सिंक |
| mediaPlayback | FOREGROUND_SERVICE_MEDIA_PLAYBACK | पृष्ठभूमि में संगीत प्लेयर |
| location | FOREGROUND_SERVICE_LOCATION | गाड़ी चलाते समय GPS नेविगेशन |
| camera | FOREGROUND_SERVICE_CAMERA | वीडियो निगरानी एप्लिकेशन |
| connectedDevice | FOREGROUND_SERVICE_CONNECTED_DEVICE | BLE डिवाइस के साथ काम |
मुख्य अंतर Foreground और Background Service के बीच एक दिखने वाली सूचना और उत्तरजीविता प्राथमिकता की उपस्थिति है। Background Service को मेमोरी कम होने पर सिस्टम किसी भी समय रोक सकता है, जबकि Foreground Service Android Low Memory Killer तंत्र में उन्नत प्रक्रिया adj-स्तर के कारण चलती रहती है।
Background Service को सूचना की आवश्यकता नहीं होती और यह उपयोगकर्ता की जानकारी के बिना चल सकती है। हालांकि, Android 8 (API 26) से शुरू करके, Google ने पृष्ठभूमि सेवाओं को काफी प्रतिबंधित किया: background संदर्भ से startService() अब काम नहीं करता, और Context.startForegroundService() किसी भी सेवा को शुरू करने के लिए अनिवार्य हो गया जो अग्रिम में जाने की योजना बनाती है। सिस्टम ने पृष्ठभूमि निष्पादन सीमाएँ भी शुरू कीं — एक टाइमर (वर्तमान में 10 मिनट) जिसके बाद Background Service को जबरन रोक दिया जाता है।
Foreground Service, इसके विपरीत, का कोई समय सीमा नहीं है। सेवा घंटों या दिनों तक चल सकती है — जब तक उपयोगकर्ता इसे स्पष्ट रूप से बंद न करे या डिवाइस को रिबूट न करे। यह Foreground Service को उन एप्लिकेशन्स के लिए सबसे अच्छा विकल्प बनाता है जिन्हें निरंतर पृष्ठभूमि कार्य की आवश्यकता होती है: संगीत प्लेयर, गतिविधि ट्रैकर, VoIP कॉल एप्लिकेशन्स।
| पैरामीटर | Foreground Service | Background Service |
|---|---|---|
| सूचना | अनिवार्य | आवश्यक नहीं |
| जीवनकाल | कोई सीमा नहीं | 10 मिनट तक (API 26+) |
| सिस्टम प्राथमिकता | उच्च (ADJ 2) | निम्न (ADJ 8+) |
| API 26+ लॉन्च | startForegroundService() | background से प्रतिबंधित |
Android 12 (API 31) से शुरू करके, Google ने Foreground Service शुरू करने पर महत्वपूर्ण प्रतिबंध लगाए। मुख्य परिवर्तन अधिकांश सेवा प्रकारों के लिए background संदर्भ से startForegroundService() कॉल करने पर प्रतिबंध है। अपवाद केवल तब लागू होते हैं जब उपयोगकर्ता ने स्पष्ट रूप से सहमति दी हो (उदाहरण के लिए, FOREGROUND_SERVICE_SPECIAL_USE अनुमति के माध्यम से) या जब सेवा BOOT_COMPLETED ब्रॉडकास्ट इंटेंट के जवाब में शुरू की जाती है।
API 34+ को लक्ष्य करने वाले एप्लिकेशन मेनिफ़ेस्ट में प्रत्येक घोषित सेवा के लिए एक foregroundServiceType ब्लॉक होना चाहिए। उदाहरण के लिए, डेटा सिंक सेवा के लिए, android:foregroundServiceType="dataSync" निर्दिष्ट करें। यदि प्रकार निर्दिष्ट नहीं है, तो सिस्टम सेवा को अमान्य मानता है और शुरू करने के प्रयास में MissingForegroundServiceTypeException फेंकता है। Google Play प्रकारों के अनुरूप की जाँच करता है और बेमेल के मामले में प्रकाशन को अस्वीकार कर सकता है।
Android 14 (API 34) में, प्रत्येक Foreground Service प्रकार के लिए एक अलग अनुमति है। डेवलपर को उन्हें मेनिफ़ेस्ट में घोषित करना चाहिए और सेवा शुरू करने से पहले रनटाइम पर उन्हें अनुरोध करना चाहिए। dataSync के लिए FOREGROUND_SERVICE_DATA_SYNC और mediaPlayback के लिए FOREGROUND_SERVICE_MEDIA_PLAYBACK की आवश्यकता है। उपयोगकर्ता सेटिंग्स में अनुमति रद्द कर सकता है, जिससे सक्रिय सेवा रुक जाएगी।
Google ने Android 14 में Foreground Service नोटिफिकेशन टाइमआउट तंत्र भी शुरू किया: यदि सेवा निर्माण के 10 सेकंड के भीतर startForeground() कॉल नहीं करती है, तो सिस्टम एक अपवाद फेंकता है। यह कठोरापन उन एप्लिकेशन्स से निपटने के लिए है जो सूचना कॉल में देरी करते हैं या उसे छोड़ देते हैं, और foreground के रूप में Background Service के रूप में काम करते हैं।
Foreground Service का उपयोग उन कार्यों की एक विस्तृत श्रृंखला में किया जाता है जिन्हें पृष्ठभूमि में गारंटीड निष्पादन की आवश्यकता होती है। सबसे सामान्य परिदृश्यों में मीडिया प्लेबैक, जियोलोकेशन ट्रैकिंग, डेटा सिंक्रोनाइज़ेशन और पेरिफेरल डिवाइसों के साथ काम शामिल है। आइए उनमें से प्रत्येक को विस्तार से देखें।
एक क्लासिक उदाहरण एक संगीत प्लेयर है जो एप्लिकेशन को छोटा करने के बाद भी प्लेबैक जारी रखता है। सेवा MediaStyle नोटिफिकेशन, नियंत्रण बटन के साथ शुरू होती है और mediaPlayback प्रकार का उपयोग करती है। उपयोगकर्ता स्टेटस बार में ट्रैक की जानकारी देख सकता है और एप्लिकेशन खोले बिना प्लेबैक को नियंत्रित कर सकता है।
नेविगेशन एप्लिकेशन निरंतर निर्देशांक ट्रैकिंग के लिए location प्रकार के Foreground Service का उपयोग करते हैं। सेवा वर्तमान गति, यात्रा समय और ट्रैकिंग रोकने का बटन दिखाने वाली एक सूचना प्रदर्शित करती है। Foreground Service के बिना, सिस्टम कुछ मिनटों में पृष्ठभूमि में निर्देशांक प्राप्त करना बंद कर देगा, जिससे नेविगेशन असंभव हो जाएगा।
वॉइस और वीडियो कॉल एप्लिकेशन — VoIP क्लाइंट — एक सक्रिय कनेक्शन बनाए रखने के लिए Foreground Service का उपयोग करते हैं। phoneCall प्रकार (Android 14 से) की सेवा यह सुनिश्चित करती है कि एप्लिकेशन को छोटा करने पर कॉल ड्रॉप न हो। सूचना कॉल की अवधि और माइक्रोफ़ोन और स्पीकर नियंत्रण प्रदर्शित करती है।
आइए डेटा सिंक्रोनाइज़ेशन के लिए Kotlin में एक Foreground Service बनाना देखें। सेवा एक Activity से लॉन्च की जाएगी, प्रगति के साथ एक नोटिफिकेशन प्रदर्शित करेगी, और पूरा होने के बाद सही ढंग से समाप्त हो जाएगी। उदाहरण सभी अनिवार्य तत्वों को प्रदर्शित करता है: मेनिफ़ेस्ट घोषणा, नोटिफिकेशन चैनल, startForeground() कॉल और foregroundServiceType हैंडलिंग।
class SyncService : Service() {
companion object {
const val CHANNEL_ID = "sync_channel"
const val NOTIFICATION_ID = 1001
}
override fun onCreate() {
super.onCreate()
createNotificationChannel()
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val notification = buildNotification()
startForeground(NOTIFICATION_ID, notification)
performSync()
return START_STICKY
}
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID,
"सिंक्रोनाइज़ेशन",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "डेटा सिंक चैनल"
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
private fun buildNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("सिंक्रोनाइज़ेशन")
.setContentText("सर्वर पर डेटा अपलोड")
.setSmallIcon(R.drawable.ic_sync)
.setOngoing(true)
.build()
}
private fun performSync() {
GlobalScope.launch(Dispatchers.IO) {
// सिंक अनुकरण
delay(5000)
stopForeground(Service.STOP_FOREGROUND_REMOVE)
stopSelf()
}
}
override fun onBind(intent: Intent): IBinder? = null
}
Android 12+ पर सेवा के सही ढंग से काम करने के लिए, आपको Foreground Service को AndroidManifest.xml में प्रकार और आवश्यक अनुमतियों के साथ घोषित करना होगा। foregroundServiceType गुण लक्ष्य API 34+ के लिए अनिवार्य है, और FOREGROUND_SERVICE_DATA_SYNC और POST_NOTIFICATIONS अनुमतियों को रनटाइम पर अनुरोध किया जाना चाहिए।
<!-- AndroidManifest.xml -->
<uses-permission
android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission
android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission
android:name="android.permission.POST_NOTIFICATIONS" />
<application ...>
<service
android:name=".SyncService"
android:foregroundServiceType="dataSync"
android:exported="false" />
</application>
अपनी उच्च विश्वसनीयता के बावजूद, Foreground Service की सीमाएँ हैं। मुख्य एक उपयोगकर्ता के लिए दृश्यता है। एप्लिकेशन बिना सूचना के पृष्ठभूमि में लंबे कार्य नहीं कर सकता, जो UX दृष्टिकोण से हमेशा स्वीकार्य नहीं होता। इसके अतिरिक्त, सिस्टम कुछ प्रकारों के लिए समय सीमा पार करने पर भी Foreground Service को जबरन रोक सकता है — उदाहरण के लिए, dataSync कई घंटों के संचालन तक सीमित है।
Foreground Service का एक विकल्प WorkManager है, जो विलंबित और पृष्ठभूमि कार्यों के लिए एक Android Jetpack लाइब्रेरी है। WorkManager डिवाइस रिबूट के बाद भी कार्य निष्पादन की गारंटी देता है और कार्य श्रृंखलाओं, आवर्तित संचालनों और नेटवर्क और बैटरी बंधनों का समर्थन करता है। अधिकांश पृष्ठभूमि कार्यों के लिए, Google सीधी सेवा के बजाय WorkManager की सिफारिश करता है।
JobScheduler कार्यों को शेड्यूल करने के लिए Android में निर्मित API है। यह उन कार्यों के लिए उपयुक्त है जिन्हें स्थगित किया जा सकता है: Wi-Fi सिंक्रोनाइज़ेशन, चार्जर से कनेक्ट होने पर डेटा डाउनलोड। JobScheduler बैटरी बचाने के लिए कार्यों को विंडो में समूहबद्ध करता है, Foreground Service के विपरीत जो पावर सेविंग स्थिति की परवाह किए बिना निरंतर चलता है।
छोटे कार्यों (10–15 सेकंड तक) के लिए, आप विलंबित निष्पादन के साथ WorkManager से CoroutineWorker का उपयोग कर सकते हैं। यदि किसी कार्य को एक निश्चित समय पर सख्ती से निष्पादित किया जाना है, तो BroadcastReceiver के साथ AlarmManager का उपयोग करें। इस प्रकार, Foreground Service लंबे निरंतर संचालनों का एक समाधान है, सभी पृष्ठभूमि परिदृश्यों के लिए एक सार्वभौमिक उपकरण नहीं।
अक्सर पूछे जाने वाले प्रश्न
Foreground Service एक Android सेवा है जिसमें स्टेटस बार में स्थायी सूचना होती है जो उपयोगकर्ता को दिखाई देने वाले लंबे कार्य करती है। इसकी उच्च उत्तरजीविता प्राथमिकता होती है और Background Service के विपरीत, मेमोरी कम होने पर सिस्टम इसे नहीं रोकता।
Foreground Service एक अनिवार्य सूचना प्रदर्शित करता है, इसकी कोई समय सीमा नहीं है और यह सिस्टम समाप्ति से सुरक्षित है। Background Service उपयोगकर्ता के लिए अदृश्य है, 10 मिनट तक (API 26+) चलती है और किसी भी समय Low Memory Killer द्वारा रोकी जा सकती है।
Android 14 9 प्रकार परिभाषित करता है: dataSync, mediaPlayback, location, camera, connectedDevice, phoneCall, microphone, health और remoteMessaging। प्रत्येक प्रकार के लिए एक संबंधित अनुमति और मेनिफ़ेस्ट में foregroundServiceType विशेषता के माध्यम declaration आवश्यक है।
यदि सेवा निर्माण के 10 सेकंड के भीतर startForeground() कॉल नहीं करती है (Android 14), तो सिस्टम एक ForegroundServiceDidNotStartInTimeException अपवाद फेंकता है और सेवा को जबरन रोक देता है। यदि ऑपरेशन मुख्य थ्रेड पर चल रहा है तो एप्लिकेशन को ANR (Application Not Responding) भी मिलेगा।
नहीं, Foreground Service की सूचना को प्रोग्रामेटिक रूप से छुपाना असंभव है। Android 9 (API 28) से शुरू करके, सूचना अनिवार्य है और उपयोगकर्ता द्वारा स्वाइप करके नहीं हटाई जा सकती। इसे हटाने का एकमात्र तरीका stopForeground(REMOVE_NOTIFICATION) और stopSelf() कॉल करके सेवा को रोकना है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें