JobScheduler Android میں ایک سسٹم سروس ہے، جو API 21 (Android 5.0 Lollipop) میں متعارف کرائی گئی، جو ایپلیکیشنز کو مخصوص شرائط کی بنیاد پر پس منظر کے کاموں کی انجام دہی کا شیڈول بنانے کی اجازت دیتی ہے۔ AlarmManager کے برعکس، JobScheduler کو درست انجام دہی کے وقت کی ضرورت نہیں ہوتی — نظام خود ایپلیکیشن کی ضروریات اور ڈیوائس کی موجودہ حالت کو ملا کر بہترین لمحے کا تعین کرتا ہے۔ Android Developers, 2026 کے مطابق، سروس نیٹ ورک، چارج، اسٹوریج کی حالت اور ڈیوائس کے غیر فعال ہونے کے معیار کو سپورٹ کرتی ہے۔
اہم نکات
JobScheduler Android میں ایک سسٹم سروس ہے جو بجلی کی کھپت کو کم کرنے کے لیے متعدد پس منظر کے کاموں کو بیچوں میں گروپ کرتی ہے۔ ہر ایپ کے ڈیوائس کو جگا کر اپنا کام کرنے کے بجائے، JobScheduler انہیں گروپ کرتا ہے اور بہترین لمحے پر انجام دیتا ہے جب ڈیوائس پہلے سے فعال ہو۔ یہ بیٹری کی زندگی کو نمایاں طور پر بڑھاتا ہے۔
JobScheduler سے پہلے، ڈیولپرز پس منظر کے کاموں کے لیے AlarmManager اور BroadcastReceiver استعمال کرتے تھے۔ اس طریقہ کار کا مسئلہ یہ تھا کہ ہر ایپ آزادانہ طور پر ڈیوائس کو جگاتی تھی، جس سے بیٹری تیزی سے ختم ہوتی تھی۔ JobScheduler نے بیچ انجام دہی ونڈو متعارف کروا کر اس مسئلے کو حل کیا، جس کے تحت نظام مختلف ایپس کے تمام طے شدہ کاموں کو بیک وقت چلاتا ہے۔
کام کا اصول ایک JobInfo آبجیکٹ پر مبنی ہے جسے ایپ JobScheduler کو بھیجتی ہے۔ نظام کام کو محفوظ کرتا ہے اور اسے اس وقت انجام دیتا ہے جب تمام مخصوص شرائط پوری ہوتی ہیں۔ WorkManager کے برعکس، JobScheduler ناکامی پر دوبارہ شروع ہونے کی ضمانت نہیں دیتا — اگر کوئی کام استثنا پھینکتا ہے تو ڈیولپر کو دستی طور پر دوبارہ شیڈول کرنا ہوگا۔
JobScheduler JobService اور JobInfo پر مبنی فن تعمیر استعمال کرتا ہے۔ JobInfo کام اور اس کی شرائط کو بیان کرتا ہے، JobService میں انجام دہی کی منطق ہوتی ہے۔ ایپ getSystemService(JobScheduler.class) کے ذریعے کام کو رجسٹر کرتی ہے اور schedule(jobInfo) کال کرتی ہے۔ نظام شیڈولنگ کا خیال رکھتا ہے۔
JobService ایک تجریدی کلاس ہے جو Service سے وراثت میں ملتی ہے۔ اس کے دو اہم طریقے ہیں: onStartJob (کام شروع ہونے پر کال ہوتا ہے) اور onStopJob (نظام کے ذریعے کام کو زبردستی روکنے پر کال ہوتا ہے)۔ JobInfo Builder کے ذریعے بنایا جاتا ہے اور اس میں تمام کام کے پیرامیٹرز ہوتے ہیں: شناخت کنندہ، شرائط، وقت کی پابندیاں۔
public class SyncJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// مرکزی تھریڈ پر چلتا ہے
Thread thread = new Thread(() -> {
performSync();
jobFinished(params, false);
});
thread.start();
return true; // true = کام جاری ہے
}
@Override
public boolean onStopJob(JobParameters params) {
return true; // true = کام دوبارہ شیڈول کریں
}
}
JobScheduler ایک ساتھ متعدد معیار مقرر کرنے کی اجازت دیتا ہے: نیٹ ورک کی قسم (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED)، چارجنگ کی حالت (requiresCharging)، بیٹری کی سطح (requiresBatteryNotLow)، اسٹوریج کی حالت (requiresStorageNotLow) اور غیر فعال موڈ (requiresDeviceIdle)۔ کام صرف اس وقت چلتا ہے جب تمام معیار پورے ہوں۔
JobInfo.Builder ہر پس منظر کے کام کے لیے لچکدار ترتیبات فراہم کرتا ہے۔ پیرامیٹرز کا صحیح امتزاج انجام دہی کی بروقت اور بجلی کی کھپت کے درمیان توازن قائم کرنے کی اجازت دیتا ہے۔
| طریقہ | تفصیل | مثال |
|---|---|---|
| setRequiredNetworkType | مطلوبہ نیٹ ورک کی قسم | NETWORK_TYPE_UNMETERED |
| setRequiresCharging | ڈیوائس چارج ہو رہی ہے | true |
| setRequiresDeviceIdle | ڈیوائس غیر فعال ہے | true |
| setOverrideDeadline | زیادہ سے زیادہ انتظار کا وقت (ملی سیکنڈ) | 300000 |
| setMinimumLatency | کم از کم تاخیر (ملی سیکنڈ) | 60000 |
| setPeriodic | متواتر انجام دہی (ملی سیکنڈ) | 3600000 |
| setBackoffCriteria | ناکامی پر دوبارہ کوشش کی حکمت عملی | LINEAR / EXPONENTIAL |
ایک اہم پیرامیٹر setOverrideDeadline ہے۔ اگر آخری تاریخ مقرر کی جاتی ہے، تو نظام ضمانت دیتا ہے کہ کام اس وقت تک چلے گا، چاہے تمام شرائط پوری نہ ہوں۔ یہ وقت کے لحاظ سے اہم کاموں کے لیے مفید ہے، جیسے ہر 6 گھنٹے میں مطابقت پذیری۔
ایک عام منظر نامہ Wi-Fi سے منسلک ہونے اور ڈیوائس چارج ہونے پر ڈیٹا کی مطابقت پذیری ہے۔ ایپ متعلقہ معیار کے ساتھ JobInfo بناتی ہے اور اسے JobScheduler کو بھیجتی ہے۔ سازگار حالات پورے ہونے پر نظام کام چلاتا ہے۔
ComponentName serviceName = new ComponentName(this, SyncJobService.class);
JobInfo jobInfo = new JobInfo.Builder(JOB_ID_SYNC, serviceName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.setOverrideDeadline(6 * 60 * 60 * 1000) // 6 گھنٹے
.build();
JobScheduler scheduler = (JobScheduler)
getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);
JobService کو AndroidManifest.xml میں BIND_JOB_SERVICE اجازت کے ساتھ رجسٹر ہونا چاہیے۔ onStartJob طریقے میں، کام مکمل ہونے کے بعد jobFinished کال کرنا ضروری ہے — ورنہ نظام کام کو لامحدود طور پر چلتا ہوا سمجھے گا اور اسے زبردستی روک سکتا ہے۔
<service
android:name=".SyncJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
JobScheduler کی کئی حدود ہیں۔ پہلی، یہ صرف Android 5+ پر دستیاب ہے — پرانے ورژنز کے لیے متبادل درکار ہے۔ دوسری، نظام کم استعمال شدہ ایپس کے کاموں میں تاخیر کر سکتا ہے، خاص طور پر Android 9+ پر App Standby Buckets کے ساتھ۔ تیسری، JobScheduler ناکامی پر دوبارہ شروع ہونے کا ضمانتی طریقہ کار فراہم نہیں کرتا۔
Google براہ راست JobScheduler استعمال کرنے کے بجائے WorkManager استعمال کرنے کی سفارش کرتا ہے۔ WorkManager Android 5+ پر اندرونی طور پر JobScheduler استعمال کرتا ہے، لیکن پرانے ورژنز کے لیے معاونت، انجام دہی کی ضمانت، کام کے سلسلے اور LiveData کے ذریعے حالت کی نگرانی شامل کرتا ہے۔ اگر آپ کی ایپ صرف Android 8+ کو سپورٹ کرتی ہے اور پیچیدہ پس منظر کے کام کی منطق کی ضرورت نہیں ہے، تو JobScheduler پھر بھی جائز ہو سکتا ہے۔
JobScheduler کو ڈیبگ کرنے کے لیے، ADB کے ذریعے dumpsys jobscheduler استعمال کریں: کمانڈ تمام طے شدہ کاموں، ان کی حالت، باقی وقت اور انجام دہی کی تاریخ دکھاتا ہے۔ کسی مخصوص ایپ کے لیے: adb shell dumpsys jobscheduler | grep package_name۔ اس سے آپ جانچ سکتے ہیں کہ کام رجسٹرڈ ہے یا نہیں، کون سی شرائط مقرر ہیں اور کیوں نہیں چل رہا۔ آپ پروگرام کے ذریعے کام کی حالت جانچنے کے لیے JobScheduler.getPendingJob() بھی استعمال کر سکتے ہیں۔ مزید برآں، کام کی انجام دہی کے دوران بجلی کی کھپت کا تجزیہ کرنے کے لیے Android Studio Profiler استعمال کیا جا سکتا ہے۔ Android 5+ پر ایپس کے لیے، JobScheduler نیٹ ورک اور چارجنگ کی شرائط کے ساتھ غیر درست پس منظر کے کاموں کے لیے ایک قابل اعتماد ٹول ہے۔
پہلے سے طے شدہ طور پر، JobService مرکزی تھریڈ پر چلتا ہے، لہذا تمام مسدود کرنے والی کارروائیوں کے لیے علیحدہ تھریڈ بنانے یا AsyncTask استعمال کرنے کی ضرورت ہوتی ہے۔ WorkManager کے برعکس، JobScheduler بلٹ ان تھریڈ پول فراہم نہیں کرتا۔ ڈیولپر آزادانہ طور پر تھریڈز اور مطابقت پذیری کا انتظام کرتا ہے۔ متوازی کاموں کے لیے ThreadPoolExecutor اور مرکزی تھریڈ کے ساتھ مواصلت کے لیے Handler استعمال کرنے کی سفارش کی جاتی ہے۔ onStopJob میں، رساو سے بچنے کے لیے چلنے والے تھریڈز کو صحیح طریقے سے روکنا ضروری ہے۔
JobScheduler setPeriodic(long intervalMillis) طریقے کے ذریعے متواتر کاموں کو سپورٹ کرتا ہے۔ کم از کم وقفہ 15 منٹ ہے۔ تاہم، WorkManager کے برعکس، JobScheduler درست وقفے کی پابندی کی ضمانت نہیں دیتا — نظام دوسرے کاموں کے ساتھ بیچ کرنے کے لیے انجام دہی کو منتقل کر سکتا ہے۔ setPeriodic طریقہ ایک لچکدار وقفہ (فلیکس ونڈو) بھی سپورٹ نہیں کرتا، جو بعد کے API ورژنز میں ظاہر ہوا۔ درست متواتر انجام دہی کے لیے، BroadcastReceiver کے ساتھ مل کر AlarmManager استعمال کریں۔
Android 9 سے شروع کرتے ہوئے، Google نے App Standby Buckets متعارف کرایا، جو استعمال کی تعدد کے مطابق ایپس کو درجہ بند کرتا ہے: Active, Working Set, Frequent, Rare۔ Rare زمرے کی ایپس کو JobScheduler کاموں میں 24 گھنٹے تک تاخیر کا سامنا کرنا پڑتا ہے۔ ڈیولپرز صرف ایپ کے معیار کے ذریعے زمرے کو متاثر کر سکتے ہیں — نظام کے طریقہ کار خود بخود ان ایپس کی ترجیح بڑھاتے ہیں جن کے ساتھ صارف باقاعدگی سے تعامل کرتا ہے۔ JobScheduler اس درجہ بندی کو مدنظر رکھتا ہے، اور Rare ایپ کا کام صرف دیکھ بھال کی ونڈو میں انجام دیا جائے گا۔ Active زمرے (سب سے زیادہ استعمال ہونے والی) کی ایپس کے لیے، تاخیر کم سے کم ہوتی ہے اور شرائط پوری ہونے پر کام تقریباً فوراً چلتے ہیں۔
درست وقت والے متواتر کاموں کے لیے، JobScheduler موزوں نہیں ہے — AlarmManager استعمال کریں۔ مختصر ایک بار کے کاموں کے لیے — نوٹیفکیشن کے ساتھ Foreground Service۔ JobScheduler ان کاموں کے لیے بہترین ہے جہاں وقت کی درستگی سے زیادہ توانائی کی کارکردگی اہم ہے: مطابقت پذیری، اپ ڈیٹ ڈاؤن لوڈ، بیچ ڈیٹا پروسیسنگ۔ پس منظر کے کام کے آلے کا صحیح انتخاب براہ راست صارف کے تجربے اور ڈیوائس کی بیٹری کی زندگی کو متاثر کرتا ہے۔ حتمی نتیجہ: شرائط کے ساتھ بیچ پروسیسنگ کے لیے JobScheduler، طے شدہ کاموں کے لیے AlarmManager اور یونیورسل شیڈیولر کے طور پر WorkManager استعمال کریں۔
اکثر پوچھے گئے سوالات
ہاں، JobScheduler مختلف ایپس کے کاموں کو بیچوں میں گروپ کرتا ہے اور انہیں ایک ساتھ انجام دیتا ہے۔ یہ AlarmManager پر ایک اہم فائدہ ہے: ہر ایپ کے ڈیوائس کو الگ جگانے کے بجائے، نظام پروسیسر کو ایک بار جگاتا ہے اور تمام طے شدہ کاموں پر کارروائی کرتا ہے۔
اگر مناسب وقت کے اندر jobFinished کال نہیں کیا گیا، تو نظام زبردستی onStopJob کال کر سکتا ہے اور کام ختم کر سکتا ہے۔ ایک کام کو چند منٹوں میں مکمل کرنے اور اختتام پر ہمیشہ jobFinished کال کرنے کی سفارش کی جاتی ہے۔
Doze Mode میں، JobScheduler تمام کاموں کو اگلی دیکھ بھال کی ونڈو تک ملتوی کر دیتا ہے، جو وقتاً فوقتاً آتی ہے۔ setOverrideDeadline کا استعمال یقینی بناتا ہے کہ کام ان ونڈوز کو مدنظر رکھتے ہوئے انجام دیا جائے گا، لیکن ضروری نہیں کہ درست وقت پر۔
WorkManager ایک لائبریری ہے جو Android 5+ پر اندرونی طور پر JobScheduler استعمال کرتی ہے۔ WorkManager انجام دہی کی ضمانت، پرانے ورژنز (API 14+) کے لیے معاونت، Worker سلسلے، LiveData/Flow کے ذریعے حالت کی نگرانی اور ناکامی پر خودکار دوبارہ کوشش شامل کرتا ہے۔
منسوخ کرنے کے لیے، مخصوص کام کے لیے scheduler.cancel(JOB_ID) یا ایپ کے تمام کاموں کے لیے scheduler.cancelAll() استعمال کریں۔ یقینی بنائیں کہ Job ID، JobInfo بناتے وقت بتائے گئے ID سے مماثل ہے، ورنہ کام منسوخ نہیں ہوگا۔
ڈیولپرز کو سمجھنا چاہیے کہ JobScheduler ایک نچلی سطح کا سسٹم API ہے جو تجربہ کار ٹیموں کے لیے ڈیزائن کیا گیا ہے جو ڈیوائس پر پس منظر کے کاموں پر مکمل کنٹرول چاہتی ہیں۔ زیادہ تر ایپلیکیشنز کے لیے، WorkManager Android کے لیے ایک آسان، محفوظ اور زیادہ جدید API کے ساتھ ایک جیسی فعالیت فراہم کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں