יותר מדי אירועי 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
כי הוא
קל יותר לשימוש והרבה יותר יעיל.
מומלץ עבורך
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Excessive wakeups\n\nWakeups are a mechanism in the\n[`AlarmManager`](/reference/android/app/AlarmManager) API that\nlets developers set an alarm to wake up a device at a specified time. Your app\nsets a wakeup alarm by calling one of the `set()` methods in\n[`AlarmManager`](/reference/android/app/AlarmManager) with\neither the\n[`RTC_WAKEUP`](/reference/android/app/AlarmManager#RTC_WAKEUP)\nor\n[`ELAPSED_REALTIME_WAKEUP`](/reference/android/app/AlarmManager#ELAPSED_REALTIME_WAKEUP)\nflag. When a wakeup alarm is triggered, the device comes out of low-power mode\nand holds a [partial wake lock](/topic/performance/vitals/wakelock) while executing the alarm's\n[`onReceive()`](/reference/android/content/BroadcastReceiver#onReceive(android.content.Context,%20android.content.Intent))\nor\n[`onAlarm()`](/reference/android/app/AlarmManager.OnAlarmListener#onAlarm())\nmethod. If wakeup alarms are triggered excessively, they can drain a device's\nbattery.\n\nTo help you improve app quality, Android automatically monitors apps for\nexcessive wakeup alarms and displays the information in Android vitals. For\ninformation on how the data is collected, see [Play Console\ndocs](https://support.google.com/googleplay/android-developer/answer/7385505).\n\nIf your app is waking up the device excessively, you can use the guidance in\nthis page to diagnose and fix the problem.\n\nFix the problem\n---------------\n\nThe [`AlarmManager`](/reference/android/app/AlarmManager) was\nintroduced in early versions of the Android platform, but over time, many use\ncases that previously required\n[`AlarmManager`](/reference/android/app/AlarmManager) are now\nbetter served by newer features like\n[WorkManager](/topic/libraries/architecture/workmanager).\nThis section contains tips for reducing wake up alarms, but in the long term,\nconsider migrating your app to follow the recommendations in the [best\npractices](#best_practices) section.\n\nIdentify the places in your app where you schedule wakeup alarms and reduce\nthe frequency that those alarms are triggered. Here are some tips:\n\n- Look for calls to the various\n [`set()`](/reference/android/app/AlarmManager#set(int,%20long,%20java.lang.String,%20android.app.AlarmManager.OnAlarmListener,%20android.os.Handler))\n methods in\n [`AlarmManager`](/reference/android/app/AlarmManager) that\n include either the\n [`RTC_WAKEUP`](/reference/android/app/AlarmManager#RTC_WAKEUP)\n or\n [`ELAPSED_REALTIME_WAKEUP`](/reference/android/app/AlarmManager#ELAPSED_REALTIME_WAKEUP)\n flag.\n\n- We recommend including your package, class, or method name in your alarm's tag\n name so that you can easily identify the location in your source where the\n alarm was set. Here are some additional tips:\n\n - Leave out any personally identifying information (PII) in the name, such as an email address. Otherwise, the device logs `_UNKNOWN` instead of the alarm name.\n - Don't get the class or method name programmatically, for example by calling [`getName()`](/reference/java/lang/Class#getName()), because it could get obfuscated by Proguard. Instead use a hard-coded string.\n - Don't add a counter or unique identifiers to alarm tags. The system will not be able to aggregate alarms that are set that way because they all have unique identifiers.\n\nAfter fixing the problem, verify that your wakeup alarms are working as\nexpected by running the following [ADB](/studio/command-line/adb)\ncommand: \n\n adb shell dumpsys alarm\n\nThis command provides information about the status of the alarm system service\non the device. For more information, see\n[dumpsys](https://source.android.com/devices/tech/debug/dumpsys).\n\nBest practices\n--------------\n\nUse wakeup alarms only if your app needs to perform a user facing operation\n(such as posting a notification or alerting the user). For a list of\nAlarmManager best practices, see [Scheduling\nAlarms](/training/scheduling/alarms).\n\nDon't use\n[`AlarmManager`](/reference/android/app/AlarmManager) to\nschedule background tasks, especially repeating or network background tasks. Use\n[WorkManager](/topic/libraries/architecture/workmanager)\nto schedule background tasks because it offers the following benefits:\n\n- batching - jobs are combined so that battery consumption is reduced\n- persistence - if the device is rebooted, scheduled WorkManager jobs run after the reboot finishes\n- criteria - jobs can run based on conditions, such as whether or not the device is charging or WiFi is available\n\nFor more information, see [Guide to background processing](/guide/background).\n\nDon't use [`AlarmManager`](/reference/android/app/AlarmManager)\nto schedule timing operations that are valid only while the app is running (in\nother words, the timing operation should be canceled when the user exits the\napp). In those situations, use the\n[`Handler`](/reference/android/os/Handler) class because it is\neasier to use and much more efficient.\n\nRecommended for you\n-------------------\n\n- Note: link text is displayed when JavaScript is off\n- [Stuck partial wake locks](/topic/performance/vitals/wakelock)\n- [ANRs](/topic/performance/vitals/anr)"]]