ব্যাকগ্রাউন্ড টাস্কের ওভারভিউ

অ্যাপকে প্রায়ই একসাথে একাধিক কাজ করতে হয়। Android API আপনাকে এটি করতে দেওয়ার জন্য অনেক বিভিন্ন উপায় প্রদান করে। সঠিক বিকল্প বেছে নেওয়া খুবই গুরুত্বপূর্ণ; একটি বিকল্প কোনও একটি পরিস্থিতির জন্য সঠিক হলেও অন্য কোনও পরিস্থিতির জন্য খুবই ভুল হতে পারে। ভুল API বেছে নিলে আপনার অ্যাপের পারফর্ম্যান্স বা রিসোর্স দক্ষতা ক্ষতিগ্রস্ত হতে পারে, যার ফলে ব্যাটারি শেষ হয়ে যেতে পারে এবং ব্যবহারকারীর ডিভাইসের সামগ্রিক পারফর্ম্যান্স কমে যেতে পারে। কিছু ক্ষেত্রে, ভুল পদ্ধতি বেছে নিলে আপনার অ্যাপ Play Store-এ তালিকাভুক্ত নাও হতে পারে।

এই ডকুমেন্ট থেকে আপনি বিভিন্ন বিকল্পের ব্যাপারে জানতে পারবেন এবং আপনার পরিস্থিতির জন্য সঠিক বিকল্প বেছে নিতে সাহায্য পাবেন।

পরিভাষা

ব্যাকগ্রাউন্ড টাস্কের সাথে সম্পর্কিত কিছু গুরুত্বপূর্ণ শব্দ একাধিক, পরস্পরবিরোধী উপায়ে ব্যবহার করা হতে পারে। এই কারণে, আমাদের শর্তাবলী সংজ্ঞায়িত করা গুরুত্বপূর্ণ।

কোনও অ্যাপ ব্যাকগ্রাউন্ডে চলতে থাকলে, সিস্টেম সেটির উপর বেশ কিছু বিধিনিষেধ আরোপ করে। (যেমন, বেশিরভাগ ক্ষেত্রে, ব্যাকগ্রাউন্ডে থাকা কোনও অ্যাপ ফোরগ্রাউন্ড সার্ভিস লঞ্চ করতে পারে না।)

এই ডকুমেন্টের উদ্দেশ্যে, আমরা "টাস্ক" শব্দটি ব্যবহার করব যার অর্থ হল কোনও অ্যাপ তার মূল ওয়ার্কফ্লোর বাইরে যে অপারেশন করছে। এই বিষয়ে যাতে কোনও ভুল বোঝাবুঝি না হয়, তাই আমরা টাস্কের ধরনকে তিনটি প্রধান বিভাগে ভাগ করেছি: অ্যাসিঙ্ক্রোনাস কাজ, টাস্ক শিডিউলিং API এবং ফোরগ্রাউন্ড সার্ভিস।

সঠিক বিকল্প বেছে নিন

বেশিরভাগ ক্ষেত্রে, আপনার টাস্কের জন্য সঠিক API ব্যবহার করার জন্য, টাস্কটি কোন বিভাগের (অ্যাসিঙ্ক্রোনাস কাজ, টাস্ক শিডিউলিং API, অথবা ফোরগ্রাউন্ড সার্ভিস) মধ্যে পড়ে তা নির্ধারণ করে আপনি সঠিক API খুঁজে পেতে পারেন।

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

ব্যাকগ্রাউন্ড টাস্কের ক্ষেত্রে দুটি প্রধান পরিস্থিতি বিবেচনা করতে হবে:

এই দুটি পরিস্থিতির নিজস্ব সিদ্ধান্ত ট্রি আছে।

অ্যাসিঙ্ক্রোনাস কাজ

অনেক ক্ষেত্রে, কোনও অ্যাপ ফোরগ্রাউন্ডে চলাকালীন সেটিকে শুধু একই সাথে একাধিক অপারেশন করতে হয়। যেমন, কোনও অ্যাপকে সময়সাপেক্ষ গণনা করতে হতে পারে। UI থ্রেডে গণনা করা হলে, গণনা শেষ না হওয়া পর্যন্ত ব্যবহারকারী অ্যাপের সাথে ইন্টার‍্যাক্ট করতে পারবেন না; এর ফলে ANR সমস্যা হতে পারে। এই ধরনের ক্ষেত্রে, অ্যাপের অ্যাসিঙ্ক্রোনাস কাজ বিকল্প ব্যবহার করা উচিত।

সাধারণ অ্যাসিঙ্ক্রোনাস কাজের বিকল্পের মধ্যে Kotlin coroutines ও Java থ্রেড অন্তর্ভুক্ত; আপনি অ্যাসিঙ্ক্রোনাস কাজ ডকুমেন্টেশনে আরও তথ্য পেতে পারেন। এটি মনে রাখা গুরুত্বপূর্ণ যে ব্যাকগ্রাউন্ড টাস্ক API-এর মতো, অ্যাসিঙ্ক্রোনাস কাজ শেষ হওয়ার কোনও গ্যারেন্টি নেই যদি অ্যাপটি একটি বৈধ লাইফসাইকেল স্টেজে না থাকে (যেমন, অ্যাপটি ফোরগ্রাউন্ড ছেড়ে চলে গেলে)।

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

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

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

ব্যাকগ্রাউন্ড টাস্কের সবচেয়ে সাধারণ কিছু পরিস্থিতির মধ্যে রয়েছে:

  • নির্দিষ্ট সময় অন্তর সার্ভার থেকে ডেটা আনা হচ্ছে
  • সেন্সর ডেটা ফেচ করা (যেমন, স্টেপ কাউন্টার ডেটা)
  • নির্দিষ্ট সময় অন্তর লোকেশন ডেটা পাওয়া (আপনাকে Android 10 বা তার পরবর্তী ভার্সনে ACCESS_BACKGROUND_LOCATION অনুমতি দিতে হবে)
  • কন্টেন্ট ট্রিগারের উপর ভিত্তি করে কন্টেন্ট আপলোড করা, যেমন ক্যামেরা দিয়ে তোলা ফটো

ফোরগ্রাউন্ড সার্ভিস

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

ফোরগ্রাউন্ড সার্ভিস তৈরি করার দুটি পদ্ধতি আছে। আপনি নিজের Service ঘোষণা করতে পারেন এবং Service.startForeground()-এ কল করে পরিষেবাটি যে একটি ফোরগ্রাউন্ড সার্ভিস তা নির্দিষ্ট করতে পারেন। বিকল্প হিসেবে, আপনি WorkManager ব্যবহার করে ফোরগ্রাউন্ড সার্ভিস তৈরি করতে পারেন, যেমন দীর্ঘ সময় ধরে চলা ওয়ার্কারদের জন্য সহায়তা-তে আলোচনা করা হয়েছে। তবে, এটি জানা গুরুত্বপূর্ণ যে WorkManager-এর মাধ্যমে তৈরি করা ফোরগ্রাউন্ড সার্ভিসকে অন্যান্য ফোরগ্রাউন্ড সার্ভিসের মতোই সব বিধিনিষেধ মেনে চলতে হয়। WorkManager শুধু কিছু সুবিধাজনক API প্রদান করে যাতে ফোরগ্রাউন্ড সার্ভিস তৈরি করা আরও সহজ হয়।

বিকল্প API

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

বিকল্প API ব্যবহার করার সবচেয়ে সাধারণ কিছু পরিস্থিতি হল:

ব্যবহারকারীর শুরু করা টাস্ক

উপযুক্ত API কীভাবে বেছে নিতে হয় তা ফ্লোচার্টে দেখানো হয়েছে। এই চার্ট 'ব্যবহারকারীর শুরু করা টাস্ক' বিভাগের মেটেরিয়ালের সারসংক্ষেপ দেখায়।
ছবি ১: ব্যবহারকারীর শুরু করা ব্যাকগ্রাউন্ড টাস্ক চালানোর জন্য সঠিক API কীভাবে বেছে নেবেন।

কোনও অ্যাপকে ব্যাকগ্রাউন্ড টাস্ক পারফর্ম করতে হলে এবং অ্যাপটি দৃশ্যমান থাকাকালীন ব্যবহারকারী অপারেশন শুরু করলে, সঠিক পদ্ধতি খুঁজে পেতে এইসব প্রশ্নের উত্তর দিন।

অ্যাপ ব্যাকগ্রাউন্ডে থাকাকালীন টাস্কটি কি চলতে থাকা প্রয়োজন?

অ্যাপ ব্যাকগ্রাউন্ডে থাকাকালীন টাস্কটি চালিয়ে যাওয়ার প্রয়োজন না হলে, আপনার অ্যাসিঙ্ক্রোনাস কাজ ব্যবহার করা উচিত। অ্যাসিঙ্ক্রোনাস কাজ করার জন্য অনেক বিকল্প আছে। যে গুরুত্বপূর্ণ বিষয়টি বুঝতে হবে তা হল, অ্যাপ ব্যাকগ্রাউন্ডে চলে গেলে এইসব বিকল্প কাজ করা বন্ধ করে দেয়। (অ্যাপ বন্ধ হয়ে গেলেও এগুলি বন্ধ হয়ে যায়।) যেমন, কোনও সোশ্যাল মিডিয়া অ্যাপ তার কন্টেন্ট ফিড রিফ্রেশ করতে চাইতে পারে, কিন্তু ব্যবহারকারী স্ক্রিন থেকে বেরিয়ে গেলে অপারেশনটি শেষ করার প্রয়োজন হবে না।

টাস্কটি স্থগিত বা বাধাগ্রস্ত হলে ব্যবহারকারীর অভিজ্ঞতা কি খারাপ হবে?

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

এটি কি একটি ছোট, গুরুত্বপূর্ণ টাস্ক?

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

শুধু এই উদ্দেশ্যে কোনও বিকল্প API আছে?

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

তবে, ফোরগ্রাউন্ড সার্ভিস ডিভাইসের অনেক রিসোর্স ব্যবহার করতে পারে বলে, কখন ও কীভাবে সেগুলি ব্যবহার করা যাবে সেই বিষয়ে সিস্টেম অনেক বিধিনিষেধ আরোপ করে। অনেক ক্ষেত্রে, ফোরগ্রাউন্ড সার্ভিস ব্যবহার করার পরিবর্তে, আপনি একটি বিকল্প API ব্যবহার করতে পারেন যা কম ঝামেলা সহ আপনার জন্য কাজ পরিচালনা করে। যেমন, ব্যবহারকারী কোনও নির্দিষ্ট লোকেশনে পৌঁছালে আপনার অ্যাপকে কোনও অ্যাকশন নিতে হলে, ফোরগ্রাউন্ড সার্ভিসের মাধ্যমে ব্যবহারকারীর লোকেশন ট্র্যাক করার পরিবর্তে জিওফেন্স API ব্যবহার করা সবচেয়ে ভালো বিকল্প।

কোনও ইভেন্টের উত্তরে টাস্ক

উপযুক্ত API কীভাবে বেছে নিতে হয় তা ফ্লোচার্টে দেখানো হয়েছে। এই চার্ট 'কোনও ইভেন্টের উত্তরে টাস্ক' বিভাগে মেটেরিয়ালের সারসংক্ষেপ দেখায়।
ছবি ২: ইভেন্ট-ট্রিগার করা ব্যাকগ্রাউন্ড টাস্ক চালানোর জন্য কীভাবে সঠিক API বেছে নেবেন।

কোনও ট্রিগারের উত্তরে কখনও কখনও কোনও অ্যাপকে ব্যাকগ্রাউন্ডে কাজ করতে হয়, যেমন:

এটি কোনও এক্সটার্নাল ট্রিগার (যেমন, FCM মেসেজ) হতে পারে অথবা অ্যাপের মাধ্যমে সেট করা অ্যালার্মের প্রতিক্রিয়া হতে পারে। যেমন, কোনও গেম কিছু অ্যাসেট আপডেট করার জন্য FCM মেসেজ পেতে পারে।

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

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

টাস্কটি সম্পূর্ণ হতে কয়েক সেকেন্ডের বেশি সময় লাগলে, টাস্ক শিডিউল করার API ব্যবহার করুন।