החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
מקפיא לאפליקציות שנשמרו במטמון
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
Android 11 QPR3 ואילך תומך בהקפאת האפליקציות שנשמרו במטמון. התכונה הזו מפסיקה את הביצוע של תהליכים שנשמרו במטמון, ומפחיתה את השימוש במשאבים על ידי אפליקציות שמתנהגות בצורה לא תקינה ועשויות לנסות לפעול בזמן שהן שמורות במטמון. המסגרת מקפיאה אפליקציות שנשמרו במטמון על ידי העברת התהליכים שלהן ל-cgroup קפוא. כך ניתן לצמצם את צריכת המעבד (CPU) בזמן פעילות ובזמן חוסר פעילות כשיש אפליקציות פעילות שנשמרו במטמון.
אפשר להפעיל את הכלי להקפאת אפליקציות באמצעות דגל בתצורת המערכת או אפשרות למפתחים.
הטמעת האפליקציה להקפאת אפליקציות
הכלי להקפאת אפליקציות שנשמרו במטמון משתמש ב-freezer של הליבה cgroup v2. במכשירים שכוללים ליבה תואמת אפשר להפעיל את התכונה (אופציונלי). כדי לעשות זאת, מפעילים את האפשרות למפתחים 'השהיית ביצוע של אפליקציות שנשמרו במטמון' או מגדירים את הדגל activity_manager_native_boot use_freezer
בהגדרות המכשיר כ-true
. לדוגמה:
adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot
המאגר מושבת כשהדגל use_freezer
מוגדר כ-false או כשאפשרות הפיתוח מושבתת. אפשר לשנות את ההגדרה הזו על ידי שינוי ההגדרות של המכשיר במהדורת תוכנה או בעדכון.
הכלי להקפאת אפליקציות לא חושף ממשקי API רשמיים (ואין לו לקוח להטמעת הפניה), אבל הוא משתמש בממשקי ה-API המוסתרים של המערכת setProcessFrozen
ו-enableFreezer
. פרטים על ממשקי ה-API האלה זמינים ב-Process.java
של ActivityManager וב-ActivityManagerService API. מפתחים יכולים גם להיעזר בקוד הלקוח ב-ActivityManager
לצורך ניסויים.
טיפול בתכונות בהתאמה אישית
בדרך כלל, תהליכים לא אמורים לבצע עבודה כלשהי במטמון, אבל יכול להיות שבאפליקציות מסוימות יש תכונות בהתאמה אישית שנתמכות בתהליכים שצפויים לפעול במטמון. כשהקפאת האפליקציות מופעלת במכשיר שבו פועלת אפליקציה כזו, התהליכים ששמורים במטמון קופאים ויכול להיות שהם ימנעו את הפעולה של תכונות בהתאמה אישית.
כפתרון עקיף, אם לאפליקציה יש תהליך שצריך לבצע פעילויות בזמן שהוא במטמון, צריך לשנות את סטטוס התהליך ל'לא במטמון' (כמו Bound ForeGround Service (BFGS) או 'חזית') לפני שהתהליך צריך לבצע עבודה כלשהי כדי לאפשר לאפליקציה להישאר פעילה.
בדיקת האפליקציות שהוקפאו
כדי לוודא שהכלי להקפאת אפליקציות פועל כמצופה, אפשר להיעזר במקורות המידע הבאים:
בודקים את רשימת התהליכים הקפואים באמצעות הפקודה adb shell dumpsys activity
ו-grep עבור Apps frozen:
.
בודקים אם הקובץ /sys/fs/cgroup/uid_0/cgroup.freeze
קיים.
הצגת logcat, שבו מוצגות רשומות קפואות ורשומות לא קפואות בכל פעם שתהליך עובר להקפאה או ממנה. לדוגמה:
adb logcat | grep -i "\(freezing\|froze\)"
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Cached apps freezer\n\nAndroid 11 QPR3 or higher supports the cached apps\nfreezer. This feature stops execution for cached processes and reduces resource\nusage by misbehaving apps that might attempt to operate while cached. The\nframework freezes cached apps by migrating their processes into a frozen cgroup;\nthis reduces active and idle CPU consumption in presence of active cached apps.\nThe app freezer can be enabled using a system configuration flag or a developer\noption.\n\nImplement the apps freezer\n--------------------------\n\nThe cached apps freezer leverages the kernel cgroup v2 freezer. Devices shipping\nwith a compatible kernel can (optionally) enable it. To do so, enable the\ndeveloper option \"Suspend execution for cached apps\" or set the device config\nflag `activity_manager_native_boot use_freezer` to `true`. For example: \n\n adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot\n\nThe freezer is disabled when the flag `use_freezer` is set to false or the\ndeveloper option is disabled. You can toggle this setting by changing a device\nconfiguration in a software release or update.\n\nThe apps freezer doesn't expose official APIs (and doesn't have a reference\nimplementation client), but does use the hidden system APIs `setProcessFrozen`\nand `enableFreezer`. For details on these APIs, refer to ActivityManager's\n`Process.java` and the ActivityManagerService API. Developers can also refer to\nthe client code in `ActivityManager` for experiments.\n\nHandle custom features\n----------------------\n\nTypically, processes aren't expected to do any work when cached, but some apps\nmight have custom features supported by processes that are expected to run while\ncached. When the apps freezer is enabled on a device running such an app, the\ncached processes are frozen and might prevent custom features from working.\n\nAs a workaround, if an app has a process that needs to perform activities while\ncached, change the process status to non-cached (such as Bound ForeGround\nService (BFGS) or foreground) before the process needs to do any work to allow\nthe app to remain active.\n\nTest the apps freezer\n---------------------\n\nTo verify the app freezer is working as intended, use the following resources:\n\n- Check for a list of frozen processes using the `adb shell dumpsys activity`\n command and grep for `Apps frozen:`.\n\n- Check for the presence of the `/sys/fs/cgroup/uid_0/cgroup.freeze` file.\n\n- View logcat, which shows frozen and unfrozen entries each time a process\n migrates in or out of the freezer. For example:\n\n adb logcat | grep -i \"\\(freezing\\|froze\\)\""]]