অ্যাপ হাইবারনেশন

একজন গড় Android ব্যবহারকারী তাদের ডিভাইসে 50+ অ্যাপ ইনস্টল করেন (ডিভাইসের RAM-স্তর বাড়লে সংখ্যা বাড়ে)। যাইহোক, এই অ্যাপগুলির একটি উল্লেখযোগ্য সংখ্যক ব্যবহারকারীর দ্বারা দীর্ঘ সময়ের জন্য অব্যবহৃত হয়।

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

প্ল্যাটফর্ম পরিবর্তন করা OEMগুলি অ্যাপ হাইবারনেশন বাস্তবায়নের সাথে বিরোধ করতে পারে। উদাহরণ স্বরূপ

  • অ্যাপ ব্যবহারের সংজ্ঞা পরিবর্তন করা বা AOSP-এ নেই এমন একটি অ্যাপকে জাগানোর উপায় প্রবর্তন করা অ্যাপ হাইবারনেশনের সঠিকতাকে ব্যাহত করতে পারে
  • অ্যাপ হাইবারনেশনের অনুরূপ একটি OEM-এর মালিকানা সীমাবদ্ধতা প্রক্রিয়া অনুরূপ উদ্দেশ্য সম্পাদন করতে পারে। যদিও উভয়ই থাকতে পারে, কিছু ওভারল্যাপ থাকতে পারে।

CDD পরিবর্তনের জন্য প্রয়োজনীয়তার একটি নতুন সেট রূপরেখা দেয় যা অ্যাপ ব্যবহারের উপর ভিত্তি করে, বিদ্যমান 3.5.1 প্রয়োজনীয়তার অনুরূপ। অ্যাপ হাইবারনেশন এই প্রয়োজনীয়তাগুলি অনুসরণ করে।

ফ্রেমওয়ার্ক কোড এখানে থাকে:

নীতির যুক্তি এখানে বাস করে:

  • রেপো: প্ল্যাটফর্ম/প্যাকেজ/মডিউল/অনুমতি
  • ডিরেক্টরি: PermissionController/src/com/android/permissioncontroller/hibernation

উচ্চ-স্তরের স্থাপত্য

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

  • স্বয়ংক্রিয়-প্রত্যাহার অনুমতি
  • ফোর্স-স্টপ অ্যাপটি
  • ODEX এবং VDEX ফাইল মুছুন
  • অ্যাপ ক্যাশে মুছুন

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

পরিকল্পিত নকশা দুটি প্রধান অংশকে কেন্দ্র করে:

  • কখন একটি প্যাকেজ হাইবারনেট করা উচিত তা নির্ধারণ করা
  • হাইবারনেটিং প্যাকেজ অপ্টিমাইজ করা

PermissionController একটি নতুন সিস্টেম পরিষেবা, AppHibernationService , এবং একটি চাকরি পরিষেবা AppHibernationJobService, হল সেই আঠা যা সামগ্রিক সিদ্ধান্ত গ্রহণ এবং যুক্তি নিয়ন্ত্রণ করে৷

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

একটি প্যাকেজ অপ্টিমাইজ করা হল যেখানে সমস্ত প্রকৃত সঞ্চয়/অপ্টিমাইজেশন ঘটবে৷ AppHibernationService সিস্টেমের বিভিন্ন অংশের সাথে যোগাযোগ করে প্যাকেজ বন্ধ করতে, ক্যাশে ডেটা মুছে ফেলতে, ART আর্টিফ্যাক্টগুলি মুছে ফেলতে ইত্যাদি। Android 11 এবং নিম্নতর ডিভাইসগুলিতে স্বয়ংক্রিয়-প্রত্যাহার কার্যকারিতা বজায় রাখতে AppHibernationJobService থেকে অনুমতি প্রত্যাহার সরাসরি শুরু করা হয়েছে।

ব্যবহারকারীর অভিজ্ঞতা

ব্যবহারকারীকে কোন অ্যাপগুলি হাইবারনেট করা যেতে পারে তার উপর তথ্য এবং নিয়ন্ত্রণ উভয়ই প্রদান করা হয়৷

স্বয়ংক্রিয়-প্রত্যাহারের মতো, ব্যবহারকারী কোন অ্যাপগুলি হাইবারনেট করা হয়েছে সে সম্পর্কে একটি বিজ্ঞপ্তি পান এবং অ্যাপটি খুলতে এবং হাইবারনেশন থেকে বের করে আনতে বা প্রয়োজনে অব্যবহৃত অ্যাপটি মুছে ফেলার জন্য বিজ্ঞপ্তি থেকে সরাসরি সেটিংসে যাওয়ার বিকল্প রয়েছে৷

আমরা বিদ্যমান অনুমতি স্বয়ংক্রিয়-প্রত্যাহার অব্যাহতির অভিপ্রায়ের মাধ্যমে হাইবারনেশন থেকে একটি ছাড়ের জন্য ব্যবহারকারীকে জিজ্ঞাসা করার বিকাশকারীর অভিপ্রায়কে সমর্থন করতে থাকি৷

অনঅগ্রসর উপযোগিতা

হাইবারনেশন-নির্দিষ্ট বৈশিষ্ট্যগুলি Android 12 থেকে উপলব্ধ। এই বৈশিষ্ট্যগুলি আগের সংস্করণগুলিতে কাজ করতে পারে না যেহেতু প্ল্যাটফর্মের উপাদানগুলি (যেমন নতুন সিস্টেম পরিষেবা) উপস্থিত নেই৷ অটো-প্রত্যাহার পূর্ববর্তী OS সংস্করণগুলির জন্য বর্তমানে বাস্তবায়িত হিসাবে কাজ করতে থাকে।

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

কাস্টমাইজ করা

যেহেতু কিছু বাস্তবায়ন মডুলার সিস্টেম উপাদানের অংশ, তাই অংশীদাররা বৈশিষ্ট্যটি পরিবর্তন করতে নিরুৎসাহিত হয়। পার্টনাররা এর পরিবর্তে অনুরূপ বৈশিষ্ট্য/কার্যকারিতা প্রয়োগ করতে পারে যতক্ষণ না তারা CDD প্রয়োজনীয়তা অনুসরণ করে।

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

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

পরীক্ষামূলক

অ্যাপ হাইবারনেশন সঠিকভাবে কাজ করছে তা নিশ্চিত করতে CTS এবং ইউনিট পরীক্ষা রয়েছে।