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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন