Android 11 QPR3 یا بالاتر از فریزر برنامه های ذخیره شده در حافظه پنهان پشتیبانی می کند. این ویژگی اجرای فرآیندهای حافظه پنهان را متوقف میکند و استفاده از منابع را با عملکرد نادرست برنامههایی که ممکن است سعی کنند در حین ذخیرهسازی حافظه پنهان کار کنند، کاهش میدهد. این فریم ورک برنامههای کش را با انتقال فرآیندهای آنها به یک cgroup منجمد میکند. این امر مصرف CPU فعال و بیکار را در حضور برنامه های کش فعال کاهش می دهد. فریزر برنامه را می توان با استفاده از یک پرچم پیکربندی سیستم یا یک گزینه توسعه دهنده فعال کرد.
فریزر برنامه ها را پیاده سازی کنید
فریزر برنامه های ذخیره شده از فریزر هسته cgroup v2 استفاده می کند. دستگاههایی که دارای هسته سازگار هستند میتوانند (اختیاری) آن را فعال کنند. برای انجام این کار، گزینه توسعهدهنده «Suspend execution for cache apps» را فعال کنید یا پیکربندی دستگاه را با flag activity_manager_native_boot use_freezer
روی true
تنظیم کنید. به عنوان مثال:
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
هنگامی که flag use_freezer
روی false تنظیم شده باشد یا گزینه developer غیر فعال باشد، فریزر غیرفعال می شود. میتوانید با تغییر پیکربندی دستگاه در نسخه یا بهروزرسانی نرمافزار، این تنظیم را تغییر دهید.
فریزر برنامهها APIهای رسمی را نمایش نمیدهد (و کلاینت پیادهسازی مرجع ندارد)، اما از APIهای مخفی سیستم setProcessFrozen
و enableFreezer
استفاده میکند. برای جزئیات بیشتر در مورد این APIها، به ActivityManager's Process.java
و ActivityManagerService API مراجعه کنید. توسعه دهندگان همچنین می توانند برای آزمایشات به کد مشتری در ActivityManager
مراجعه کنند.
مدیریت ویژگی های سفارشی
به طور معمول، انتظار نمی رود فرآیندها هنگام ذخیره شدن در حافظه پنهان کاری انجام دهند، اما برخی از برنامه ها ممکن است دارای ویژگی های سفارشی باشند که توسط فرآیندهایی پشتیبانی می شوند که انتظار می رود در حین ذخیره شدن در حافظه پنهان اجرا شوند. وقتی فریزر برنامهها در دستگاهی که چنین برنامهای را اجرا میکند فعال میشود، فرآیندهای حافظه پنهان ثابت میشوند و ممکن است از عملکرد ویژگیهای سفارشی جلوگیری کنند.
به عنوان راهحل، اگر برنامهای فرآیندی دارد که نیاز به انجام فعالیتهایی در حافظه پنهان دارد، وضعیت فرآیند را به غیر کش (مانند سرویس Bound ForeGround (BFGS) یا پیشزمینه) تغییر دهید قبل از اینکه فرآیند نیاز به انجام هر کاری برای اجازه دادن به برنامه داشته باشد. برای فعال ماندن
فریزر اپلیکیشن ها را تست کنید
برای تأیید اینکه فریزر برنامه طبق برنامه کار می کند، از منابع زیر استفاده کنید:
لیستی از فرآیندهای ثابت را با استفاده از دستور
adb shell dumpsys activity
و grep برایApps frozen:
.وجود فایل
/sys/fs/cgroup/uid_0/cgroup.freeze
را بررسی کنید.مشاهده logcat، که هر بار که یک فرآیند به داخل یا خارج از فریزر مهاجرت می کند، ورودی های منجمد و منجمد نشده را نشان می دهد. به عنوان مثال:
adb logcat | grep -i "\(freezing\|froze\)"