BGTaskScheduler হল Apple এর একটি ফ্রেমওয়ার্ক যা iOS 13 এবং তার পরের অ্যাপ্লিকেশনগুলিতে ব্যাকগ্রাউন্ড টাস্ক শিডিউল এবং সম্পাদনের জন্য। এটি পুরানো Background Fetch এবং performFetch কে প্রতিস্থাপন করেছে, ব্যাকগ্রাউন্ড অপারেশনের জন্য একটি ইউনিফাইড API প্রদান করেছে। Apple Developer Documentation, 2026 অনুযায়ী, ফ্রেমওয়ার্কটি দুই ধরনের টাস্ক অন্তর্ভুক্ত করে: দীর্ঘ অপারেশনের জন্য BGProcessingTask এবং সংক্ষিপ্ত কন্টেন্ট আপডেটের জন্য BGAppRefreshTask।
মুখ্য বিষয়
BGTaskScheduler হল Apple এর একটি সিস্টেম ফ্রেমওয়ার্ক যা iOS 13 এ প্রবর্তিত হয়েছে এবং ব্যাকগ্রাউন্ড টাস্কের সম্পাদন কেন্দ্রীয়ভাবে পরিচালনা করে। এর আগমনের আগে, ডেভেলপাররা UIApplication backgroundTasks, performFetch এবং appDelegate এ ইভেন্ট হ্যান্ডলিং ব্যবহার করত, যা কোড খণ্ডিতকরণ এবং অপ্রত্যাশিত আচরণের দিকে পরিচালিত করত।
ফ্রেমওয়ার্কটি বিলম্বিত শিডিউলিং নীতিতে কাজ করে: অ্যাপ্লিকেশনটি অনন্য আইডেন্টিফায়ারের সাথে টাস্ক নিবন্ধন করে, এবং iOS নিজেই সেগুলি সম্পাদনের সর্বোত্তম মুহূর্ত নির্ধারণ করে। সিস্টেম ব্যাটারি স্তর, ব্যবহারকারীর কার্যকলাপ, নেটওয়ার্ক অবস্থা এবং অন্যান্য বিষয়গুলি বিবেচনা করে।
মূল ক্ষমতাগুলির মধ্যে সংক্ষিপ্ত এবং দীর্ঘ উভয় ব্যাকগ্রাউন্ড অপারেশনের সাথে কাজ করা অন্তর্ভুক্ত। Android এ AlarmManager এর বিপরীতে, BGTaskScheduler সঠিক সম্পাদন সময়ের গ্যারান্টি দেয় না — সিস্টেম প্রতিকূল পরিস্থিতিতে টাস্ক বিলম্বিত করার অধিকার সংরক্ষণ করে।
BGTaskScheduler হ্যান্ডলার-ভিত্তিক আর্কিটেকচার ব্যবহার করে। অ্যাপ্লিকেশনটি প্রতিটি টাস্ক প্রকারের জন্য একটি হ্যান্ডলার নিবন্ধন করে, এবং সিস্টেম এটি কল করে যখন সঠিক সময় আসে। ফ্রেমওয়ার্কটি নিজে টাস্ক সরাসরি সম্পাদন করে না — এটি কেবল অ্যাপ্লিকেশনকে জানায় যে এটি চালানোর সময় এসেছে।
নিবন্ধন Info.plist এ BGTaskSchedulerPermittedIdentifiers অ্যারের মাধ্যমে টাস্ক আইডেন্টিফায়ার ঘোষণা করে শুরু হয়। তারপর অ্যাপ্লিকেশন কোডে, registerHandler(forTaskWithIdentifier:) পদ্ধতিটি একটি হ্যান্ডলার ক্লোজার দিয়ে কল করা হয়।
import BackgroundTasks
let taskID = "com.example.app.refresh"
BGTaskScheduler.shared.registerHandler(
forTaskWithIdentifier: taskID,
using: DispatchQueue.global()
) { task in
task.expirationHandler = {
// জোর করে শেষ করার সময় কল করা হয়
}
processBackgroundTask(task as! BGAppRefreshTask)
}
নিবন্ধনের পরে, অ্যাপ্লিকেশনটিকে submitTaskRequest এর মাধ্যমে স্পষ্টভাবে টাস্ক সম্পাদনের অনুরোধ করতে হবে। অনুরোধটিতে টাস্ক আইডেন্টিফায়ার এবং সম্ভাব্য সর্বপ্রথম শুরু তারিখ অন্তর্ভুক্ত থাকে। সিস্টেম অনুরোধটি সংরক্ষণ করে এবং যখন পরিস্থিতি উপযুক্ত মনে করে তখন প্রক্রিয়া করে।
let request = BGAppRefreshTaskRequest(
identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("শিডিউলিং ত্রুটি: \(error)")
}
BGTaskScheduler দুইটি প্রধান প্রকারের টাস্ক প্রদান করে, প্রতিটি নিজস্ব ব্যবহারের ক্ষেত্রের জন্য ডিজাইন করা হয়েছে। সঠিক প্রকার নির্বাচন সরাসরি সিস্টেম দ্বারা সফল টাস্ক সম্পাদনের সম্ভাবনাকে প্রভাবিত করে।
BGAppRefreshTask সংক্ষিপ্ত ব্যাকগ্রাউন্ড কন্টেন্ট আপডেটের জন্য ডিজাইন করা হয়েছে: নতুন ডেটা লোড করা, সার্ভারের সাথে সিঙ্ক করা, উইজেট আপডেট করা। সম্পাদনের সময় 30 সেকেন্ডে সীমাবদ্ধ, যার পরে সিস্টেম টাস্কটি জোর করে শেষ করে। এই ধরনের টাস্ক BGProcessingTask এর চেয়ে বেশি বার চলে এবং এর উচ্চ অগ্রাধিকার থাকে।
BGProcessingTask দীর্ঘ অপারেশনের জন্য ডিজাইন করা হয়েছে: মিডিয়া ফাইল প্রক্রিয়াকরণ, Core Data ইন্ডেক্সিং, ব্যাকআপ তৈরি করা। টাস্কটি কয়েক মিনিট পর্যন্ত চলতে পারে, কিন্তু সিস্টেম এটি কম বার এবং শুধুমাত্র অনুকূল পরিস্থিতিতে শুরু করে — পাওয়ারে সংযুক্ত, স্থিতিশীল Wi-Fi এবং ডিভাইসে কম লোড।
| প্যারামিটার | BGAppRefreshTask | BGProcessingTask |
|---|---|---|
| সময় সীমা | 30 সেকেন্ড | কয়েক মিনিট |
| শুরু হওয়ার ফ্রিকোয়েন্সি | উচ্চ | নিম্ন |
| শর্ত | যেকোনো | পাওয়ার + Wi-Fi |
| পাওয়ার প্রয়োজন | না | সুপারিশকৃত |
| উদাহরণ | ফিড আপডেট | ভিডিও প্রক্রিয়াকরণ |
সঠিক নিবন্ধন BGTaskScheduler এর কাজ করার জন্য একটি বাধ্যতামূলক শর্ত। যদি একটি টাস্ক Info.plist এ নিবন্ধিত না হয়, সিস্টেম এটি সম্পাদনের যেকোনো অনুরোধ উপেক্ষা করবে।
Info.plist ফাইলটিতে স্ট্রিং আইডেন্টিফায়ারের তালিকা সহ BGTaskSchedulerPermittedIdentifiers অ্যারে অন্তর্ভুক্ত থাকতে হবে। প্রতিটি আইডেন্টিফায়ার অ্যাপ্লিকেশনের মধ্যে অনন্য হতে হবে। Apple রিভার্স ডোমেন নোটেশন ব্যবহার করার সুপারিশ করে।
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>com.example.app.refresh</string>
<string>com.example.app.processing</string>
</array>
একটি টাস্ক শিডিউল করতে submitTaskRequest পদ্ধতি ব্যবহার করুন। যদি একটি টাস্কের আর প্রয়োজন না হয়, এটি cancelTaskRequest বা cancelAllTaskRequests এর মাধ্যমে বাতিল করা যেতে পারে। অ্যাপ্লিকেশন মুছে ফেলা বা ডেটা রিসেট করার সময় সিস্টেম স্বয়ংক্রিয়ভাবে টাস্ক বাতিল করে।
BGTaskScheduler getPendingTaskRequests এর মাধ্যমে শিডিউল করা টাস্কের অবস্থা ট্র্যাক করার ক্ষমতা প্রদান করে। এই পদ্ধতিটি তাদের প্রকার, আইডেন্টিফায়ার এবং earliestBeginDate সম্পর্কে তথ্য সহ সমস্ত সক্রিয় অনুরোধের তালিকা ফেরত দেয়। প্রতিটি অনুরোধের জন্য, আপনি পরীক্ষা করতে পারেন যে এটি ইতিমধ্যে সম্পন্ন হয়েছে বা বাতিল করা হয়েছে কিনা, এবং পুনরায় শিডিউল করার সিদ্ধান্ত নিতে পারেন।
এটি লক্ষ্য করা গুরুত্বপূর্ণ যে সিস্টেম একটি ব্যাকগ্রাউন্ড টাস্কের সাফল্য সম্পর্কে সরাসরি কলব্যাক প্রদান করে না — হ্যান্ডলারটিকে নিজেই টাস্ক বৈশিষ্ট্যের মাধ্যমে ফলাফল রিপোর্ট করতে হবে। setTaskCompleted একটি টাস্ককে সফলভাবে সম্পন্ন হিসাবে চিহ্নিত করার অনুমতি দেয়, যার পরে সিস্টেম এই ধরনের পরবর্তী শিডিউল করা টাস্ক শুরু করতে পারে। যদি একটি টাস্ক setTaskCompleted কল না করে, সিস্টেম এটি টাইমআউট বা জোর করে শেষ হওয়ার পরে সম্পন্ন বলে বিবেচনা করে।
নির্ণয়ের জন্য, হ্যান্ডলারে OSLog ব্যবহার করার এবং Mac এ Console.app এর মাধ্যমে লগ দেখার সুপারিশ করা হয়। Apple ব্যাকগ্রাউন্ড টাস্ক পারফরম্যান্স বিশ্লেষণের জন্য MetricKit টুলও প্রদান করে — এটি সম্পাদন সময়, শক্তি খরচ এবং শুরু হওয়ার ফ্রিকোয়েন্সি সম্পর্কে ডেটা সংগ্রহ করে যা অপ্টিমাইজেশনের জন্য ব্যবহার করা যেতে পারে।
// নির্দিষ্ট টাস্ক বাতিল করুন
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)
// সব টাস্ক বাতিল করুন
BGTaskScheduler.shared.cancelAllTaskRequests()
// শিডিউল করা টাস্ক পরীক্ষা করুন
BGTaskScheduler.shared.getPendingTaskRequests { requests in
print("\(requests.count) টি টাস্ক শিডিউল করা হয়েছে")
}
BGTaskScheduler ব্যাকগ্রাউন্ড কাজের উপর কঠোর সীমাবদ্ধতা আরোপ করে। সিস্টেম প্রতিকূল পরিস্থিতিতে একটি টাস্ক অনির্দিষ্টকালের জন্য বিলম্বিত করতে পারে। ডেভেলপারদের বুঝতে হবে যে ফ্রেমওয়ার্কটি রিয়েল-টাইম টাস্কের জন্য নয়।
মূল সীমাবদ্ধতার মধ্যে রয়েছে: সিস্টেম নির্দিষ্ট সময়ে টাস্ক সম্পাদনের গ্যারান্টি দেয় না, একযোগে টাস্কের সর্বাধিক সংখ্যা সীমিত, এবং শক্তি খরচ কঠোরভাবে নিয়ন্ত্রিত। একের পর এক একাধিক টাস্ক চালানোর ফলে সেগুলি মার্জ বা বাতিল হতে পারে।
সম্পাদনের সম্ভাবনা বাড়ানোর জন্য, BGProcessingTask এর জন্য 1 ঘন্টা এবং BGAppRefreshTask এর জন্য 15 মিনিটের আগে earliestBeginDate সেট না করার সুপারিশ করা হয়। expirationHandler হ্যান্ডল করাও গুরুত্বপূর্ণ — যদি একটি টাস্ক তার সময়সীমা পূরণ করতে না পারে, সিস্টেম সঠিক সমাপ্তির জন্য এই হ্যান্ডলারকে কল করে। একটানা ব্যাকগ্রাউন্ড কাজের চক্র বজায় রাখতে হ্যান্ডলারের ভিতরেই পুনরায় শিডিউলিং করা উচিত।
আরেকটি গুরুত্বপূর্ণ সীমাবদ্ধতা নেটওয়ার্ক অনুরোধ সম্পর্কিত। BGTaskScheduler টাস্ক সম্পাদনের সময় একটি সক্রিয় নেটওয়ার্ক সংযোগের গ্যারান্টি দেয় না। অ্যাপ্লিকেশনটিকে NWPathMonitor এর মাধ্যমে স্বাধীনভাবে নেটওয়ার্ক প্রাপ্যতা পরীক্ষা করতে হবে এবং সংযোগ না থাকলে প্রক্রিয়াকরণ স্থগিত করতে হবে। এটি Android JobScheduler থেকে ভিন্ন, যা একটি নির্দিষ্ট ধরনের নেটওয়ার্কের সাথে সংযুক্ত হলেই টাস্ক সক্রিয় করতে পারে। অনুশীলনে, ডেভেলপাররা প্রায়ই নির্ভরযোগ্য ডেটা লোডিংয়ের জন্য BGTaskScheduler কে NSURLSession এর ব্যাকগ্রাউন্ড URL সেশনের সাথে একত্রিত করে।
macOS Catalina থেকে শুরু করে, BGTaskScheduler Mac এও উপলব্ধ। এটি Apple Silicon এ চলমান UIKit অ্যাপ্লিকেশনের জন্য ক্রস-প্ল্যাটফর্ম ব্যাকগ্রাউন্ড টাস্ক তৈরি করার অনুমতি দেয়। watchOS এ, ফ্রেমওয়ার্কের সীমিত কার্যকারিতা রয়েছে — শুধুমাত্র সংক্ষিপ্ত BGAppRefreshTask কমপ্লিকেশন আপডেট এবং iPhone এর সাথে ডেটা সিঙ্ক করার জন্য উপলব্ধ। ডেভেলপারদের ব্যাকগ্রাউন্ড আর্কিটেকচার পরিকল্পনা করার সময় প্ল্যাটফর্মের পার্থক্য বিবেচনা করা উচিত।
Apple BGTaskScheduler ডিবাগ করার জন্য বেশ কয়েকটি সরঞ্জাম প্রদান করে। lldb এ কমান্ড e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] সিস্টেম সীমাবদ্ধতা অতিক্রম করে জোর করে একটি ব্যাকগ্রাউন্ড টাস্ক শুরু করে। Xcode এ Debug মেনুতে Simulate Background Fetch ফ্ল্যাগ রয়েছে যা একটি সংক্ষিপ্ত ব্যাকগ্রাউন্ড আপডেট অনুকরণ করে। পারফরম্যান্স বিশ্লেষণের জন্য MetricKit ব্যবহার করা হয় — এটি প্রতিটি টাস্কের শুরু হওয়ার ফ্রিকোয়েন্সি, সম্পাদন সময়কাল এবং শক্তি খরচ সম্পর্কে তথ্য সংগ্রহ করে। এই ডেটা শিডিউলিং ফ্রিকোয়েন্সি অপ্টিমাইজ করতে এবং সঠিক টাস্ক প্রকার নির্বাচন করতে সাহায্য করে।
অনুশীলনে, BGTaskScheduler উইজেট ডেটা আপডেট, iCloud সিঙ্ক, কন্টেন্ট সহ পুশ বিজ্ঞপ্তি প্রক্রিয়াকরণ এবং Spotlight অনুসন্ধানের জন্য ইন্ডেক্সিংয়ের জন্য উপযুক্ত। এটি রিয়েল-টাইম বিশ্লেষণ, চ্যাট অ্যাপ্লিকেশন বা তাত্ক্ষণিক সম্পাদনের প্রয়োজন এমন যেকোনো টাস্কের জন্য উপযুক্ত নয়।
BGTaskScheduler এর গভীর অধ্যয়নের জন্য, Apple অফিসিয়াল WWDC ডকুমেন্টেশন সুপারিশ করে: "Advances in Background Tasks" সেশন (2020) পুরানো API থেকে মাইগ্রেশন কভার করে, এবং "Background Tasks in Practice" (2021) এ বাস্তব ব্যবহারের ঘটনা রয়েছে। Energy Efficiency Guide বিভাগটিও দরকারী, যা বর্ণনা করে কিভাবে ফ্রেমওয়ার্কটি Apple এর সামগ্রিক শক্তি-সাশ্রয় কৌশলের সাথে খাপ খায়। কোড উদাহরণ GitHub এ অফিসিয়াল Apple Developer রিপোজিটরিতে iOS এবং macOS এর জন্য সম্পূর্ণ প্রজেক্ট সহ উপলব্ধ।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Background Fetch প্রতি অ্যাপ্লিকেশনে একটি ব্যাকগ্রাউন্ড টাস্কে সীমাবদ্ধ ছিল এবং এর কোনো অগ্রাধিকার প্রক্রিয়া ছিল না। BGTaskScheduler বিভিন্ন প্রকারের সাথে একাধিক টাস্ক সমর্থন করে, একটি ইউনিফাইড API এবং স্বয়ংক্রিয় শক্তি ব্যবস্থাপনা প্রদান করে।
Apple নিবন্ধিত আইডেন্টিফায়ারের সংখ্যার উপর কোনো স্পষ্ট সীমা নির্ধারণ করে না, কিন্তু অনুশীলনে 5–10 এর বেশি টাস্ক ব্যবহার না করার সুপারিশ করা হয়। বড় সংখ্যা সিস্টেম সংস্থানের জন্য প্রতিযোগিতার কারণে প্রতিটি নির্দিষ্ট টাস্ক সম্পাদিত হওয়ার সম্ভাবনা হ্রাস করে।
ডিবাগিংয়ের জন্য, lldb এ কমান্ড e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] ব্যবহার করুন। এটি সিস্টেম সীমাবদ্ধতা অতিক্রম করে জোর করে টাস্ক শুরু করে। Debug মেনুতে Xcode Simulate Background Fetch ফ্ল্যাগও উপলব্ধ।
হ্যাঁ, BGTaskScheduler একটি প্রক্রিয়া শুরু করতে পারে এমনকি যদি অ্যাপ্লিকেশনটি ব্যবহারকারী দ্বারা জোর করে বন্ধ করা হয়। তবে, সিস্টেম অতিরিক্ত বিলম্ব প্রয়োগ করতে পারে, এবং সমস্ত টাস্ক প্রকার এই পরিস্থিতিতে সম্পাদনের গ্যারান্টি দেয় না।
সিস্টেম expirationHandler কল করে, টাস্ককে সংকেত দেয় যে এটি শেষ করতে হবে। যদি অ্যাপ্লিকেশন এই সংকেত উপেক্ষা করে এবং কাজ চালিয়ে যায়, iOS প্রক্রিয়াটি জোর করে শেষ করে। এর পরে, সিস্টেম অ্যাপ্লিকেশনের সমস্ত ব্যাকগ্রাউন্ড টাস্কের অগ্রাধিকার কমাতে পারে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন