টাস্ক শিডিউল করা

অ্যাপটি দৃশ্যমান অবস্থা থেকে চলে গেলেও চলতে থাকবে এমন টাস্ক আপনি চালাতে চাইলে, আমরা Jetpack লাইব্রেরি WorkManager ব্যবহার করার সাজেশন দিই। WorkManager-এ একটি শক্তিশালী শিডিউলিং মেকানিজম রয়েছে যা অ্যাপ রিস্টার্ট এবং ডিভাইস রিবুট জুড়ে টাস্ককে অপরিবর্তিত রাখতে দেয়।

কাজের ধরন

WorkManager তিন ধরনের কাজ ম্যানেজ করে:

  • অবিলম্বে: যেসব টাস্ক অবিলম্বে শুরু করতে হবে এবং শীঘ্রই শেষ করতে হবে। দ্রুত করা হতে পারে।
  • দীর্ঘ সময় ধরে চালানো: যেসব টাস্ক দীর্ঘ সময় ধরে চলতে পারে, সম্ভাব্যভাবে ১০ মিনিটের বেশি।
  • ডিফারেবল: শিডিউল করা টাস্ক যা পরে শুরু হয় এবং নির্দিষ্ট সময় অন্তর রান করতে পারে।

ছবি ১-এ বিভিন্ন ধরনের টাস্ক কীভাবে একে অপরের সাথে সম্পর্কিত তা দেখানো হয়েছে।

পারসিস্টেন্ট কাজ অবিলম্বে, দীর্ঘ সময় ধরে চলা বা স্থগিত করা যেতে পারে
ছবি ১: কাজের ধরন।

একইভাবে, নিম্নলিখিত সারণীতে বিভিন্ন ধরনের কাজের রূপরেখা দেওয়া হয়েছে।

ধরন পর্যায়ক্রমিকতা কীভাবে অ্যাক্সেস করা যায়
অবিলম্বে একবারের জন্য OneTimeWorkRequest এবং Worker। জরুরি ভিত্তিক কাজের জন্য, আপনার OneTimeWorkRequest-এ setExpedited() কল করুন।
দীর্ঘ মেয়াদী একবার বা নির্দিষ্ট সময় অন্তর অন্তর যেকোনও WorkRequest বা Worker। বিজ্ঞপ্তি ম্যানেজ করতে Worker-এ setForeground() কল করুন।
স্থগিত করা যায় এমন একবার বা নির্দিষ্ট সময় অন্তর অন্তর PeriodicWorkRequest এবং Worker।

WorkManager কীভাবে সেট-আপ করবেন সেই সম্পর্কে আরও তথ্যের জন্য, আপনার WorkRequests গাইড দেখুন।

WorkManager ফিচার

আরও সহজ ও সামঞ্জস্যপূর্ণ API প্রদান করার পাশাপাশি, WorkManager-এর অন্যান্য অনেক গুরুত্বপূর্ণ সুবিধা রয়েছে:

কাজের বাধ্যবাধকতা

ওয়ার্ক কনস্ট্রেন ব্যবহার করে আপনার কাজ চালানোর জন্য অনুকূল শর্তাবলী ডিক্লারেটিভভাবে নির্ধারণ করুন। যেমন, ডিভাইসটি আনমিটারড নেটওয়ার্কে থাকলে, ডিভাইসটি আইডল থাকলে অথবা ডিভাইসে পর্যাপ্ত ব্যাটারি থাকলে তবেই চালান।

রোবাস্ট শিডিউলিং

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

শিডিউল করা কাজ ইন্টার্নালি ম্যানেজ করা SQLite ডেটাবেসে সেভ করা হয় এবং WorkManager এই কাজ যাতে বজায় থাকে এবং ডিভাইস রিবুট করার সময় আবার শিডিউল করা হয় তা নিশ্চিত করে।

এছাড়াও, WorkManager ব্যাটারি সাশ্রয়কারী ফিচার ও পেশাদার পদ্ধতি মেনে চলে যেমন ডোজ মোড, তাই আপনাকে এই বিষয়ে চিন্তা করতে হবে না।

জরুরি ভিত্তিক কাজ

ব্যাকগ্রাউন্ডে এক্সিকিউশনের জন্য অবিলম্বে কাজ শিডিউল করতে আপনি WorkManager ব্যবহার করতে পারেন। ব্যবহারকারীর কাছে গুরুত্বপূর্ণ এবং কয়েক মিনিটের মধ্যে সম্পূর্ণ হয়ে যায় এমন টাস্কের জন্য আপনার জরুরি ভিত্তিক কাজ ব্যবহার করা উচিত।

ফ্লেক্সিবল রিট্রাই নীতি

কখনও কখনও কাজ ব্যর্থ হয়। WorkManager ফ্লেক্সিবল রিট্রাই পলিসি অফার করে, যার মধ্যে কনফিগার করা যায় এমন এক্সপোনেনশিয়াল ব্যাকঅফ পলিসি অন্তর্ভুক্ত।

ওয়ার্ক চেইনিং

জটিল সম্পর্কিত কাজের জন্য, একটি ইনট্যুইটিভ ইন্টারফেস ব্যবহার করে স্বতন্ত্র কাজের টাস্ক একসাথে চেইন করুন যা আপনাকে কোন অংশগুলি ক্রমানুসারে চলে এবং কোনগুলি সমান্তরালভাবে চলে তা নিয়ন্ত্রণ করতে দেয়।

Kotlin

val continuation = WorkManager.getInstance(context)
    .beginUniqueWork(
        Constants.IMAGE_MANIPULATION_WORK_NAME,
        ExistingWorkPolicy.REPLACE,
        OneTimeWorkRequest.from(CleanupWorker::class.java)
    ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
    .then(
        if (save) {
            workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
        } else /* upload */ {
            workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
        }
    )

জাভা

WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();

প্রতিটি কাজের টাস্কের জন্য, আপনি সেই কাজের জন্য ইনপুট এবং আউটপুট ডেটা নির্ধারণ করতে পারেন। একসাথে একাধিক কাজ চেইন করার সময়, WorkManager অটোমেটিক একটি কাজের টাস্ক থেকে পরেরটিতে আউটপুট ডেটা পাস করে।

বিল্ট-ইন থ্রেডিং ইন্টারঅপারেবিলিটি

WorkManager Coroutines ও RxJava-এর সাথে নির্বিঘ্নে ইন্টিগ্রেট করে এবং আপনার নিজস্ব অ্যাসিঙ্ক্রোনাস API প্লাগ-ইন করার নমনীয়তা প্রদান করে।

নির্ভরযোগ্য কাজের জন্য WorkManager ব্যবহার করুন

WorkManager এমন কাজের জন্য তৈরি করা হয়েছে যা নির্ভরযোগ্যভাবে চালাতে হয়, এমনকি ব্যবহারকারী স্ক্রিন থেকে নেভিগেট করে বেরিয়ে গেলেও, অ্যাপ বন্ধ হয়ে গেলেও বা ডিভাইস রিস্টার্ট হলেও। যেমন:

  • ব্যাকএন্ড পরিষেবায় লগ বা অ্যানালিটিক্স পাঠানো।
  • নির্দিষ্ট সময় অন্তর সার্ভারের সাথে অ্যাপ্লিকেশন ডেটা সিঙ্ক করা।

WorkManager-এর উদ্দেশ্য ইন-প্রসেস ব্যাকগ্রাউন্ড ওয়ার্ক নয় যা অ্যাপ প্রসেস বন্ধ হয়ে গেলে নিরাপদে বন্ধ করা যায়। এছাড়াও, এটি এমন সব কাজের জন্য সাধারণ সমাধান নয় যেগুলি অবিলম্বে কার্যকর করা প্রয়োজন। কোন সমাধান আপনার প্রয়োজন পূরণ করে তা দেখতে ব্যাকগ্রাউন্ড প্রসেসিং গাইড পর্যালোচনা করুন।

অন্যান্য API-এর সাথে সম্পর্ক

এই সারণী থেকে বোঝা যায় যে WorkManager কীভাবে একই ধরনের API-এর সাথে সম্পর্কিত। এই তথ্য আপনার অ্যাপের প্রয়োজনীয়তা অনুযায়ী সঠিক API বেছে নিতে সাহায্য করতে পারে।

API এর জন্য সাজেস্ট করা হয়েছে WorkManager-এর সাথে সম্পর্ক
Coroutines অ্যাপ দৃশ্যমান অবস্থা থেকে বেরিয়ে গেলে, সমস্ত অ্যাসিঙ্ক্রোনাস কাজ যা চালিয়ে যাওয়ার প্রয়োজন নেই। Kotlin-এ Coroutines হল মূল থ্রেড থেকে বেরিয়ে আসার স্ট্যান্ডার্ড উপায়। তবে, অ্যাপ বন্ধ হয়ে গেলেই এগুলি বন্ধ হয়ে যায়। অ্যাপ বন্ধ হয়ে যাওয়ার পরেও যেসব কাজ চালিয়ে যেতে হবে, সেগুলির জন্য WorkManager ব্যবহার করুন।
AlarmManager শুধু অ্যালার্ম। WorkManager-এর সাধারণ ওয়ার্কারের মতো নয়, AlarmManager-এর এক্স্যাক্ট অ্যালার্ম ডিভাইসকে ডোজ মোড থেকে জাগিয়ে তোলে। তাই, এটি পাওয়ার ও রিসোর্স ম্যানেজমেন্টের ক্ষেত্রে দক্ষ নয়। এটি শুধুমাত্র ক্যালেন্ডার ইভেন্টের মতো নির্দিষ্ট অ্যালার্ম বা বিজ্ঞপ্তির জন্য ব্যবহার করুন, পুনরাবৃত্ত ব্যাকগ্রাউন্ড কাজের জন্য নয়।

অননুমোদিত API পরিবর্তন করুন

WorkManager API হল আগের Android ব্যাকগ্রাউন্ড শিডিউলিং API-এর পরিবর্তে ব্যবহার করার জন্য সাজেস্ট করা API, যার মধ্যে FirebaseJobDispatcher এবং GcmNetworkManager অন্তর্ভুক্ত।

শুরু করুন

আপনার অ্যাপে WorkManager ব্যবহার করা শুরু করতে শুরু করার নির্দেশিকা দেখুন।

অতিরিক্ত রিসোর্স

নিম্নলিখিত বিভাগগুলি কিছু অতিরিক্ত রিসোর্স প্রদান করে।

ভিডিও

ব্লগ

নমুনা