ניהול צריכת החשמל

מערכת Android 9 (רמת API 28) כוללת תכונות חדשות לשיפור ניהול צריכת החשמל במכשיר. האלה לצד תכונות שכבר היו בגרסאות קודמות, כדי להבטיח שמשאבי המערכת מקבלים את האפליקציות שזקוקות להם ביותר.

התכונות של ניהול צריכת החשמל מתחלקות לשתי קטגוריות:

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

קטגוריות בהמתנה של אפליקציות

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

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

פעיל

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

  • האפליקציה הפעילה פעילות
  • האפליקציה מפעילה שירות שפועל בחזית
  • לאפליקציה יש מתאם סנכרון שמשויך לספק תוכן שמשמש אפליקציה בחזית
  • המשתמש לוחץ על התראה מהאפליקציה

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

ערכת עבודה

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

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

לעיתים קרובות

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

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

נדיר

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

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

אף פעם

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

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

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

שיטות מומלצות

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

  • אל תנסו לתמרן את המערכת כדי להכניס את האפליקציה לקטגוריה אחת, או אחר. שיטות החלוקה לקטגוריות של המערכת יכולות להשתנות, וכל מכשיר היצרן יכול לבחור לכתוב אפליקציה משלו לקטגוריות באלגוריתם כלשהו. במקום זאת, חשוב לוודא שהאפליקציה פועלת כראוי שבו הוא נמצא.
  • אם לאפליקציה אין פעילות של מרכז אפליקציות, יכול להיות שהיא אף פעם לא תקודם בקטגוריה פעילה. כדאי לעצב מחדש את האפליקציה כך פעילות.
  • אם אין אפשרות להפעיל את ההתראות מהאפליקציה, המשתמשים לא יוכלו להפעיל את ההתראות קידום האפליקציה לקטגוריה הפעילה באמצעות אינטראקציה עם ההתראות. לחשבון במקרה כזה, ייתכן שתרצו לעצב מחדש חלק מההתראות המתאימות כדי תגובה מהמשתמש. להנחיות מסוימות, אפשר לעיין עיצוב הודעות ב-Material Design דפוסים.
  • באופן דומה, אם האפליקציה לא מציגה התראה בעת קבלת בהודעת FCM בעדיפות גבוהה, לא תאפשר למשתמש ליצור אינטראקציה עם האפליקציה וכך לקדם אותה הקטגוריה הפעילה. למעשה, השימוש המיועד היחיד להודעות FCM בעדיפות גבוהה הוא לשלוח התראה למשתמש, כך שמצב כזה אף פעם לא אמור להתרחש. אם לסמן באופן בלתי הולם הודעת FCM כהודעה בעלת עדיפות גבוהה, כשהיא לא מופעלת אינטראקציה עם המשתמשים, עלולה להיות לכך השלכות שליליות אחרות; לדוגמה, מצב כזה עלול לגרום לניצול מלא של המכסה של האפליקציה, מצב שעלול לגרום בדחיפות הודעות FCM יטופלו כהודעות בעדיפות רגילה.

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

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

שיפורים בחיסכון בסוללה

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

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

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

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

בדיקה ופתרון בעיות

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

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

פקודות גשר לניפוי באגים ב-Android

אפשר להשתמש בפקודות מעטפת של Android Debug Bridge כדי לבדוק כמה מהתכונות של ניהול צריכת החשמל.

לקבלת מידע על השימוש ב-ADB להעברת המכשיר למצב 'נמנום', אפשר לעיין במאמר בדיקה באמצעות 'נמנום' ו'מצב המתנה'.

קטגוריות בהמתנה של אפליקציות

ניתן להשתמש ב-ADB כדי להקצות את האפליקציה באופן ידני לקטגוריית המתנה של אפליקציה. כדי לשנות קטגוריה של אפליקציה, משתמשים בפקודה הבאה:

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

אפשר גם להשתמש בפקודה הזו כדי להגדיר כמה חבילות בבת אחת:

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

כדי לבדוק באיזו קטגוריה האפליקציה נמצאת, מריצים את הפקודה

$ adb shell am get-standby-bucket [packagename]

אם לא מעבירים את הפרמטר packagename, הפקודה תציג קטגוריות לכל האפליקציות. האפליקציה יכולה גם לגלות את הקטגוריה שלה בזמן הריצה על ידי קריאה השיטה החדשה UsageStatsManager.getAppStandbyBucket()

חיסכון בסוללה

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

כדי לדמות את המכשיר מנותק, משתמשים בפקודה

$ adb shell dumpsys battery unplug

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

$ adb shell settings put global low_power 1

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

$ adb shell dumpsys battery reset