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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

חוויית משתמש

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

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

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

תאימות לאחור

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

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

התאמה אישית

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

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

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

בדיקה

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