תרדמת אפליקציה

משתמש אנדרואיד ממוצע מתקין 50+ אפליקציות במכשירים שלו (המספר גדל ככל שדרגת ה-RAM של המכשירים עולה). עם זאת, חלק ניכר מהאפליקציות הללו אינן בשימוש על ידי המשתמש למשך תקופה ארוכה.

מצב תרדמת אפליקציה מעמיד אפליקציות שהמשתמש אינו משתמש בהן במשך מספר חודשים, בדומה לביטול אוטומטי של הרשאות. זה עוצר את האפליקציה בכוח ומכניס אותה למצב שבו אנו מייעלים לאחסון ולא לביצועים. ביטול אוטומטי של הרשאה מצורפת גם היא למצב זה והם חולקים את אותה הגדרת פטור בהגדרות . אפליקציה שהופסקה בכוח אינה מפעילה עבודות או התראות ברקע ואינה מסוגלת לשלוח הודעות דחיפה. כאשר המשתמש משתמש באפליקציה שוב, האפליקציה יוצאת ממצב שינה ועבודות/התראות/התראות פועלות שוב כרגיל. יש לתזמן מחדש כל עבודות/התראות/התראות שתוזמנו לפני שהאפליקציה נכנסה למצב שינה.

יצרני OEM שמשנים את הפלטפורמה עלולים להתנגש עם יישום מצב תרדמת האפליקציה. לדוגמה

  • שינוי הגדרת השימוש באפליקציה או הצגת דרכים להעיר אפליקציה שאינה ב-AOSP עלולים להפריע לדיוק של תרדמת האפליקציה
  • מנגנון הגבלה קנייני של יצרן ציוד מקורי בדומה לתרדמת אפליקציות עשוי לבצע מטרה דומה. בעוד ששניהם יכולים להתקיים, ייתכן שיש חפיפה מסוימת.

CDD מתווה סט חדש של דרישות לשינויים המבוססים על שימוש באפליקציה, בדומה לדרישת 3.5.1 הקיימת. מצב תרדמת אפליקציה עומד בדרישות אלה.

קוד המסגרת חי ב:

היגיון המדיניות חי ב:

  • ריפו: פלטפורמה/חבילות/מודולים/הרשאה
  • ספרייה: PermissionController/src/com/android/permissioncontroller/hibernation

ארכיטקטורה ברמה גבוהה

שירות מערכת ה-App Hibernation מייעל אפליקציות בשימוש נדיר של משתמש לאחסון ומונע מאפליקציות אלו לפעול ברקע. כדי להשיג תוצאות אלה, כאשר אנו מעבירים אפליקציה למצב שינה, אנו ספציפית:

  • ביטול אוטומטי של הרשאות
  • עצור בכוח את האפליקציה
  • מחק את קובצי ODEX ו-VDEX
  • מחק את מטמון האפליקציה

המטרה שלנו היא ליישם מצב תרדמה כפעולה הפיכה כך שהאפליקציה עדיין זמינה למשתמש דרך Launcher ומשטחים אחרים עם נתוני האפליקציה שלמים. עם הפעלת האפליקציה, נשחזר אותה ממצב עצירה בכוח ונמשיך ביצירת קבצי ODEX ו-VDEX כרגיל.

העיצוב המתוכנן מתרכז סביב שני חלקים עיקריים:

  • קביעה מתי חבילה צריכה לעבור שינה
  • אופטימיזציה של חבילת מצב שינה

שירות מערכת חדש, AppHibernationService , ושירות עבודה, AppHibernationJobService, ב- PermissionController הוא הדבק השולט בקבלת ההחלטות וההיגיון הכוללים.

הקביעה מתי חבילה צריכה לעבור שינה מופעלת בעיקר על ידי UsageStatsService ומנוהלת על ידי AppHibernationJobService ב- PermissionController . היגיון מדיניות זה חי ב- PermissionController כדי לאפשר לנו לעדכן באופן דינמי דרך Mainline. בנוסף, אנו מתכננים להוסיף אות חדש, שימוש ברכיבים, כדי ללכוד את השימוש ברכיבי החבילה (לדוגמה, שירותים, ספקי תוכן) כמדד חדש ב- UsageStatsService .

אופטימיזציה של חבילה היא המקום שבו מתרחשים כל החיסכון/האופטימיזציות בפועל. AppHibernationService מתקשר עם חלקים שונים של המערכת כדי לעצור את החבילה, למחוק נתוני מטמון, למחוק חפצי ART וכן הלאה. ביטול ההרשאה מתבצע ישירות מ- AppHibernationJobService כדי לשמור על פונקציונליות של ביטול אוטומטי במכשירי Android 11 ומטה.

חוויית משתמש

למשתמש מסופק הן מידע והן פקדים לגבי אילו אפליקציות ניתן להירדם.

בדומה לביטול אוטומטי, המשתמש מקבל התראה לגבי האפליקציות שנמצאות במצב שינה ויש לו אפשרות לעבור להגדרות ישירות מההודעה כדי לפתוח את האפליקציה ולהוציא אותה ממצב שינה או למחוק את האפליקציה שאינה בשימוש במידת הצורך.

אנו ממשיכים לתמוך בכוונת המפתח לבקש מהמשתמש פטור ממצב שינה באמצעות כוונת הפטור לביטול אוטומטי של ההרשאות הקיימות.

תאימות לאחור

תכונות ספציפיות למצב שינה זמינות החל מ-Android 12. תכונה זו לא יכלה לתפקד בגרסאות קודמות מכיוון שרכיבי הפלטפורמה (כגון שירות המערכת החדש) אינם קיימים. ביטול אוטומטי ממשיך לתפקד כפי מיושם כעת עבור גרסאות מערכת ההפעלה הקודמות.

החל מ-Android 12, כדי להבטיח תאימות לאחור, התחלף מצב שינה נוסף בדף האפליקציה תחת אפליקציות והתראות בהגדרות תוך שמירה על מתג הביטול האוטומטי המקורי בתוך תפריט המשנה הרשאות . החלפת מצב זה שולטת בפטור הכולל של מערכת ה-App Hibernation עבור האפליקציה.

התאמה אישית

מכיוון שחלק מהיישום הוא חלק מרכיב מערכת מודולרי, שותפים לא מעודדים לשנות את התכונה. שותפים יכולים במקום זאת ליישם תכונות/פונקציונליות דומות כל עוד הם עומדים בדרישות ה-CDD.

ברירת המחדל של מצב תרדמת אפליקציות אמור להיות מופעל עבור כל האפליקציות הממוקדות ל-Android 11 ומעלה. זה זהה לביטול אוטומטי של הרשאות. בעוד שההגדרה עצמה עשויה להיות מופעלת, יישום מצב תרדמת האפליקציה עשוי להיות שונה בין אפליקציות הממוקדות לאנדרואיד 11 לעומת אנדרואיד 12. ליתר דיוק, מצב תרדמת אפליקציות פועל רק עבור אפליקציות הממוקדות לאנדרואיד 11 בעוד שהיא למעשה רק ביטול אוטומטי עבור אפליקציות הממוקדות לאנדרואיד 12.

בנוסף, ייתכן שיצרני OEM מיישמים תכונה דומה. עם זאת, תכונות אלו ממוקדות בטווח זמן קצר בהרבה עבור אופטימיזציות של סוללות שיכולות להיות ספציפיות ל-OEM. כל תכונות הגבלת אפליקציה דומות שפותחו על ידי יצרני ציוד מקורי יכולים להתקיים במקביל עם מערכת ה-App Hibernation כל עוד הם עומדים בקריטריונים הקיימים המוגדרים ב- CDD .

בדיקה

למצב תרדמת אפליקציה יש בדיקות CTS ויחידות כדי לוודא שהיא פועלת כהלכה.