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

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

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

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

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

অগ্রাধিকার বাকেটগুলি হল:

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

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

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

সক্রিয়

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

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

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

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

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

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

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

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

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

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

কাজের সেট

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

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

ঘন ঘন

একটি অ্যাপ যদি নিয়মিত ব্যবহার করা হয়, তবে প্রতিদিন ব্যবহার করা অগত্যা নয়, তাহলে এটি ঘন ঘন ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, জিমে ব্যবহারকারী যে ওয়ার্কআউট-ট্র্যাকিং অ্যাপটি চালান তা ঘন ঘন ব্যবহার করা যেতে পারে।

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

বিরল

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

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

সীমাবদ্ধ

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

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

  • ব্যবহারকারী নির্দিষ্ট কিছু দিনের জন্য আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট করে না। Android 12 (API লেভেল 31) এবং 12L (API লেভেল 32) এ দিনের সংখ্যা 45। Android 13 দিনের সংখ্যা কমিয়ে 8 করে।

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

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

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

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

নিম্নলিখিত ধরণের অ্যাপগুলি সীমাবদ্ধ বাকেটে প্রবেশ করা থেকে মুক্ত এবং নিষ্ক্রিয়তা ট্রিগারকে বাইপাস করে, এমনকি অ্যান্ড্রয়েড 12 এবং উচ্চতর সংস্করণেও:

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

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

  • getAppStandbyBucket() কল করুন।

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

    adb shell am get-standby-bucket PACKAGE_NAME

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

সেরা অনুশীলন

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

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

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

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