יציאה ממצב שינה היא מנגנון
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. במקום זאת, צריך להשתמש במחרוזת בתוך הקוד. - אין להוסיף מונה או מזהה ייחודי לתגי התראה. המערכת לא תהיה אפשרות לצבור התראות שהוגדרו כך, כי לכולן מזהים ייחודיים.
- אין לכלול בשם פרטים אישיים מזהים (PII), כמו
כתובת אימייל. אחרת, המכשיר יתעד את
אחרי תיקון הבעיה, צריך לוודא שהשעון המעורר פועל כמו צריך להריץ את הפונקציה ADB הבאה הפקודה:
adb shell dumpsys alarm
הפקודה הזו מספקת מידע על הסטטוס של שירות מערכת ההתראות במכשיר. מידע נוסף זמין במאמר הבא: dumpsys.
שיטות מומלצות
יש להשתמש בהתראות התעוררות רק אם האפליקציה צריכה לבצע פעולה שגלויה למשתמשים (למשל, פרסום הודעה או שליחת התראה למשתמש). לרשימה של לשיטות המומלצות של AlertManager, ראו תזמון שעונים מעוררים
אני לא רוצה להשתמש
AlarmManager
עד
לתזמן משימות ברקע, במיוחד משימות חוזרות או משימות ברקע מסוג רשת. כדאי להשתמש
מנהל העבודה
כדי לתזמן משימות ברקע כי יש לכך את היתרונות הבאים:
- אצווה – משימות משולבות כדי שצריכת הסוללה תהיה נמוכה יותר
- עקביות – אם המכשיר מופעל מחדש, משימות מתוזמנות של WorkManager לרוץ לאחר סיום ההפעלה מחדש
- קריטריונים - משימות יכולות לפעול על סמך תנאים, למשל אם המכשיר בטעינה או שיש Wi-Fi זמין
מידע נוסף זמין במדריך לעיבוד ברקע.
אין להשתמש ב-AlarmManager
כדי לתזמן פעולות תזמון שתקפות רק בזמן שהאפליקציה פועלת (
במילים אחרות, פעולת התזמון צריכה להתבטל כשהמשתמש יוצא
באפליקציה). במצבים כאלה, משתמשים
Handler
כי הוא
קל יותר לשימוש והרבה יותר יעיל.
מומלץ עבורך
- הערה: טקסט הקישור מוצג כאשר JavaScript מושבת
- חסימות חלקיות של מצב שינה
- מקרי ANR