יותר מדי אירועי wakeup

יציאה ממצב שינה היא מנגנון AlarmManager ב-API מאפשרת למפתחים להגדיר התראה כדי להוציא את המכשיר ממצב שינה בזמן מסוים. האפליקציה שלך מגדירה התראת שעון מעורר באמצעות אחת מהשיטות של set() ב- AlarmManager עם או RTC_WAKEUP או ELAPSED_REALTIME_WAKEUP לסמן. כשמופעלת אזעקה של מצב שינה, המכשיר יוצא ממצב צריכת חשמל נמוכה לחיצה ארוכה על נעילה חלקית של מצב שינה בעת הפעלת ההתראה onReceive() או onAlarm() . אם ההתראות ליציאה ממצב שינה מופעלות יותר מדי, הן עלולות לרוקן את המכשיר סוללה.

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

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

תיקון הבעיה

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

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

  • לחפש שיחות למספרים set() שיטות ב- AlarmManager כוללים את RTC_WAKEUP או ELAPSED_REALTIME_WAKEUP לסמן.

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

    • אין לכלול בשם פרטים אישיים מזהים (PII), כמו כתובת אימייל. אחרת, המכשיר יתעד את _UNKNOWN במקום את ההתראה שם.
    • לא תקבלו את שם הכיתה או השיטה באופן פרוגרמטי, למשל באמצעות קריאה getName(), כי הוא עלול לעבור ערפול קוד (obfuscation) על ידי ProGuard. במקום זאת, צריך להשתמש במחרוזת בתוך הקוד.
    • אין להוסיף מונה או מזהה ייחודי לתגי התראה. המערכת לא תהיה אפשרות לצבור התראות שהוגדרו כך, כי לכולן מזהים ייחודיים.

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

adb shell dumpsys alarm

הפקודה הזו מספקת מידע על הסטטוס של שירות מערכת ההתראות במכשיר. מידע נוסף זמין במאמר הבא: dumpsys.

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

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

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

  • אצווה – משימות משולבות כדי שצריכת הסוללה תהיה נמוכה יותר
  • עקביות – אם המכשיר מופעל מחדש, משימות מתוזמנות של WorkManager לרוץ לאחר סיום ההפעלה מחדש
  • קריטריונים - משימות יכולות לפעול על סמך תנאים, למשל אם המכשיר בטעינה או שיש Wi-Fi זמין

מידע נוסף זמין במדריך לעיבוד ברקע.

אין להשתמש ב-AlarmManager כדי לתזמן פעולות תזמון שתקפות רק בזמן שהאפליקציה פועלת ( במילים אחרות, פעולת התזמון צריכה להתבטל כשהמשתמש יוצא באפליקציה). במצבים כאלה, משתמשים Handler כי הוא קל יותר לשימוש והרבה יותר יעיל.