অ্যাপ স্ট্যান্ডবাই বাকেট

অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) এবং এর পরবর্তী সংস্করণগুলো অ্যাপ স্ট্যান্ডবাই বাকেট সমর্থন করে। অ্যাপ স্ট্যান্ডবাই বাকেট সিস্টেমকে অ্যাপগুলোর সাম্প্রতিক ব্যবহার এবং ব্যবহারের ঘনত্বের উপর ভিত্তি করে রিসোর্সের অনুরোধগুলোকে অগ্রাধিকার দিতে সাহায্য করে। অ্যাপ ব্যবহারের ধরনের উপর ভিত্তি করে, প্রতিটি অ্যাপকে পাঁচটি অগ্রাধিকার বাকেটের মধ্যে একটিতে রাখা হয়। অ্যাপটি কোন বাকেটে আছে, তার উপর ভিত্তি করে সিস্টেম প্রতিটি অ্যাপের জন্য উপলব্ধ ডিভাইস রিসোর্স সীমিত করে।

অগ্রাধিকারের বালতি

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

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

অগ্রাধিকারের স্তরগুলো হলো নিম্নরূপ:

  • সক্রিয় : অ্যাপটি ব্যবহৃত হচ্ছে অথবা খুব সম্প্রতি ব্যবহৃত হয়েছিল।
  • কার্যপরিবেশ : অ্যাপটি নিয়মিত ব্যবহার করা হচ্ছে।
  • ঘন ঘন : অ্যাপটি প্রায়ই ব্যবহার করা হয়, কিন্তু প্রতিদিন নয়।
  • বিরল : অ্যাপটি ঘন ঘন ব্যবহৃত হয় না।
  • সীমাবদ্ধ : অ্যাপটি প্রচুর পরিমাণে সিস্টেম রিসোর্স ব্যবহার করে অথবা অনাকাঙ্ক্ষিত আচরণ প্রদর্শন করতে পারে।

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

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

সক্রিয়

একটি অ্যাপ সক্রিয় তালিকায় থাকে যখন সেটি ব্যবহৃত হয়, খুব সম্প্রতি ব্যবহৃত হয়, অথবা যখন এটি নিম্নলিখিত কাজগুলোর মধ্যে যেকোনো একটি করে:

  • একটি কার্যক্রম চালু করে।
  • একটি দীর্ঘস্থায়ী ফোরগ্রাউন্ড সার্ভিস চালায়।
  • ব্যবহারকারী একটি নোটিফিকেশন থেকে এটি ট্যাপ করেন।

যদি কোনো অ্যাপ সক্রিয় তালিকায় থাকে, তাহলে সিস্টেম অ্যাপটির কাজ বা অ্যালার্মের উপর ন্যূনতম বিধিনিষেধ আরোপ করে:

  • অ্যান্ড্রয়েড ১৬ (এপিআই লেভেল ৩৬) থেকে শুরু করে, অ্যাক্টিভ বাকেটের কোনো অ্যাপ দ্বারা ব্যাকগ্রাউন্ড জবগুলো চালু করা হলে সেগুলোর জন্য যথেষ্ট রানটাইম কোটা থাকে। এর মধ্যে JobScheduler দিয়ে সরাসরি শিডিউল করা জব, সেইসাথে WorkManager বা DownloadManager মতো অন্যান্য লাইব্রেরি দ্বারা তৈরি জবও অন্তর্ভুক্ত।

ব্যবহারকারীর মিথস্ক্রিয়া অ্যাপগুলোকে সক্রিয় হিসেবে নির্ধারণ করে।

অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) এবং এর পরবর্তী সংস্করণগুলোতে, যখন ব্যবহারকারী আপনার অ্যাপের সাথে নির্দিষ্ট কিছু উপায়ে ইন্টারঅ্যাক্ট করেন, তখন সিস্টেম সাময়িকভাবে আপনার অ্যাপটিকে অ্যাক্টিভ বাকেটে রাখে। ব্যবহারকারী আপনার অ্যাপের সাথে ইন্টারঅ্যাকশন বন্ধ করে দিলে, সিস্টেম এটিকে ব্যবহারের ইতিহাসের উপর ভিত্তি করে একটি বাকেটে রাখে।

নিম্নলিখিতগুলি এমন কিছু মিথস্ক্রিয়ার উদাহরণ যা সিস্টেমের এই আচরণটি সক্রিয় করে:

  • ব্যবহারকারী আপনার অ্যাপের পাঠানো একটি নোটিফিকেশনে ট্যাপ করেন।

  • ব্যবহারকারী একটি মিডিয়া বাটনে ট্যাপ করার মাধ্যমে আপনার অ্যাপের একটি ফোরগ্রাউন্ড সার্ভিসের সাথে ইন্টারঅ্যাক্ট করে।

  • ব্যবহারকারী Android Automotive OS-এর সাথে ইন্টারঅ্যাক্ট করার সময় আপনার অ্যাপের সাথে সংযুক্ত হন, যেখানে আপনার অ্যাপ হয় একটি ফোরগ্রাউন্ড সার্ভিস অথবা CONNECTION_TYPE_PROJECTION ব্যবহার করে।

ওয়ার্কিং সেট

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

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

ঘন ঘন

একটি অ্যাপকে ‘ফ্রিকোয়েন্ট’ বা ঘন ঘন ব্যবহৃত অ্যাপ বলা হয়, যদি সেটি নিয়মিত ব্যবহার করা হয়, কিন্তু প্রতিদিন ব্যবহার করা আবশ্যক নয়। উদাহরণস্বরূপ, একটি ওয়ার্কআউট-ট্র্যাকিং অ্যাপ যা ব্যবহারকারী জিমে চালান, সেটি ‘ফ্রিকোয়েন্ট’ বা ঘন ঘন ব্যবহৃত অ্যাপের তালিকায় থাকতে পারে।

যদি কোনো অ্যাপ ঘন ঘন ব্যবহৃত অ্যাপের তালিকায় থাকে, তাহলে সিস্টেম তার কাজ চালানো এবং অ্যালার্ম বাজানোর ক্ষমতার উপর আরও কঠোর বিধিনিষেধ আরোপ করে। বিস্তারিত জানতে, পাওয়ার ম্যানেজমেন্ট রিসোর্স লিমিটস দেখুন।

বিরল

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

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

সীমাবদ্ধ

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১)-এ যুক্ত হওয়া এই বাকেটটির প্রায়োরিটি সবচেয়ে কম এবং সমস্ত বাকেটের মধ্যে এর বিধিনিষেধ সবচেয়ে বেশি। আপনার অ্যাপটিকে সীমাবদ্ধ বাকেটে রাখা হবে কিনা, সেই সিদ্ধান্ত নেওয়ার জন্য সিস্টেম আপনার অ্যাপের আচরণ, যেমন ব্যবহারকারী কত ঘন ঘন এটির সাথে ইন্টারঅ্যাক্ট করে, তা বিবেচনা করে।

অ্যান্ড্রয়েড ১৩ (এপিআই লেভেল ৩৩) এবং এর পরবর্তী সংস্করণগুলোতে, আপনার অ্যাপটি কোনো ছাড়ের যোগ্য না হলে, সিস্টেম নিম্নলিখিত পরিস্থিতিগুলোতে আপনার অ্যাপটিকে সীমাবদ্ধ তালিকার অন্তর্ভুক্ত করে:

  • ব্যবহারকারী একটি নির্দিষ্ট সংখ্যক দিন ধরে আপনার অ্যাপের সাথে কোনো ইন্টারঅ্যাকশন করেন না। অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) এবং ১২এল (এপিআই লেভেল ৩২)-এ এই দিনের সংখ্যা হলো ৪৫। অ্যান্ড্রয়েড ১৩ এই দিনের সংখ্যা কমিয়ে ৮ করেছে।

  • আপনার অ্যাপটি ২৪ ঘণ্টার মধ্যে অতিরিক্ত সংখ্যক ব্রডকাস্ট বা বাইন্ডিং চালু করে।

সিস্টেম যদি আপনার অ্যাপটিকে সীমাবদ্ধ তালিকায় রাখে, তাহলে নিম্নলিখিত বিধিনিষেধগুলি প্রযোজ্য হবে:

  • আপনি দিনে একবার ১০ মিনিটের একটি ব্যাচড সেশনে কাজগুলো চালাতে পারবেন। এই সেশন চলাকালীন, সিস্টেম আপনার অ্যাপের কাজগুলোকে অন্যান্য অ্যাপের কাজের সাথে একত্রিত করে।
    • সীমাবদ্ধ কাজগুলো নিজে থেকে চলে না। একই সময়ে অবশ্যই অন্য অন্তত একটি কাজ চলমান বা অপেক্ষাধীন থাকতে হবে, যা অন্য যেকোনো কাজ হতে পারে।
  • সিস্টেম যখন আপনার অ্যাপটিকে কম সীমাবদ্ধ কোনো বাকেটে রাখে, তার তুলনায় আপনার অ্যাপটি কম সংখ্যক দ্রুতগামী কাজ চালাতে পারে।
  • আপনার অ্যাপ প্রতিদিন একটি অ্যালার্ম চালু করতে পারে। এই অ্যালার্মটি সুনির্দিষ্ট বা অনির্দিষ্ট হতে পারে।

সীমাবদ্ধ তালিকা থেকে অব্যাহতি

নিম্নলিখিত ধরণের অ্যাপগুলি সীমাবদ্ধ তালিকায় অন্তর্ভুক্ত হওয়া থেকে অব্যাহতি পায় এবং নিষ্ক্রিয়তার ট্রিগারকে এড়িয়ে যায়, এমনকি অ্যান্ড্রয়েড ১২ এবং তার পরবর্তী সংস্করণগুলিতেও:

অগ্রাধিকার বালতি মূল্যায়ন করুন

আপনার অ্যাপটি কোন বাকেটে বরাদ্দ করা হয়েছে তা পরীক্ষা করতে, নিম্নলিখিতগুলির মধ্যে একটি করুন:

  • getAppStandbyBucket() কল করুন।

  • টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালান:

    adb shell am get-standby-bucket PACKAGE_NAME

যখনই আপনার অ্যাপটিকে এমন একটি অ্যাপ স্ট্যান্ডবাই বাকেটে রাখা হয় যার মান STANDBY_BUCKET_ACTIVE (10) থেকে বেশি, তখন সিস্টেম আপনার অ্যাপের গতি কমিয়ে দেয়।

সর্বোত্তম অনুশীলন

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

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

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

  • যদি অ্যাপগুলো একাধিক প্যাকেজে বিভক্ত থাকে, তবে সেই প্যাকেজগুলো ভিন্ন ভিন্ন বাকেটে থাকতে পারে এবং সেগুলোর অ্যাক্সেস লেভেলও ভিন্ন হতে পারে। অ্যাপটি সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করতে, বিভিন্ন বাকেটে প্যাকেজগুলো নির্ধারণ করে এই অ্যাপগুলো পরীক্ষা করুন।