بیدار شدن بیش از حد
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
Wakeups مکانیزمی در AlarmManager
API است که به توسعه دهندگان اجازه می دهد زنگ هشداری را برای بیدار کردن دستگاه در یک زمان مشخص تنظیم کنند. برنامه شما با فراخوانی یکی از متدهای set()
در AlarmManager
با پرچم RTC_WAKEUP
یا ELAPSED_REALTIME_WAKEUP
، زنگ بیداری تنظیم می کند. هنگامی که زنگ بیداری راه اندازی می شود، دستگاه از حالت کم مصرف خارج می شود و در حین اجرای روش onReceive()
یا onAlarm()
زنگ، یک قفل بیدار جزئی را نگه می دارد. اگر هشدارهای بیداری بیش از حد فعال شوند، می توانند باتری دستگاه را تخلیه کنند.
برای کمک به بهبود کیفیت برنامه، Android بهطور خودکار برنامهها را برای هشدارهای بیش از حد بیدار شدن کنترل میکند و اطلاعات موجود در Android vitals را نمایش میدهد. برای اطلاعات در مورد نحوه جمعآوری دادهها، به اسناد کنسول Play مراجعه کنید.
اگر برنامه شما بیش از حد دستگاه را بیدار می کند، می توانید از راهنمایی در این صفحه برای تشخیص و رفع مشکل استفاده کنید.
مشکل را برطرف کنید
AlarmManager
در نسخههای اولیه پلتفرم اندروید معرفی شد، اما با گذشت زمان، بسیاری از موارد استفاده که قبلاً به AlarmManager
نیاز داشتند، اکنون توسط ویژگیهای جدیدتری مانند WorkManager بهتر ارائه میشوند. این بخش حاوی نکاتی برای کاهش هشدارهای بیدار شدن است، اما در دراز مدت، برنامه خود را برای پیروی از توصیههای بخش بهترین شیوهها مهاجرت کنید.
مکانهایی را در برنامهتان شناسایی کنید که در آنها زنگهای بیداری را برنامهریزی میکنید و فرکانس فعال شدن آن زنگها را کاهش دهید. در اینجا چند نکته وجود دارد:
به دنبال فراخوانی متدهای مختلف set()
در AlarmManager
باشید که شامل پرچم RTC_WAKEUP
یا ELAPSED_REALTIME_WAKEUP
است.
توصیه می کنیم نام بسته، کلاس یا روش خود را در نام برچسب زنگ هشدار خود وارد کنید تا بتوانید به راحتی مکان را در منبع خود که زنگ تنظیم شده است شناسایی کنید. در اینجا چند نکته اضافی وجود دارد:
- هرگونه اطلاعات شناسایی شخصی (PII) را در نام، مانند آدرس ایمیل، کنار بگذارید. در غیر این صورت، دستگاه به جای نام زنگ هشدار
_UNKNOWN
را ثبت می کند. - نام کلاس یا متد را به صورت برنامهنویسی دریافت نکنید، برای مثال با فراخوانی
getName()
زیرا ممکن است توسط Proguard مبهم شود. به جای آن از یک رشته رمزگذاری شده استفاده کنید. - شمارنده یا شناسههای منحصربهفرد را به برچسبهای هشدار اضافه نکنید. این سیستم نمی تواند آلارم هایی را که به این صورت تنظیم شده اند جمع کند زیرا همه آنها دارای شناسه های منحصر به فرد هستند.
پس از رفع مشکل، با اجرای دستور ADB زیر بررسی کنید که آلارمهای بیدارباش مطابق انتظار کار میکنند:
adb shell dumpsys alarm
این دستور اطلاعاتی در مورد وضعیت سرویس سیستم دزدگیر در دستگاه ارائه می دهد. برای اطلاعات بیشتر، dumpsys را ببینید.
بهترین شیوه ها
فقط در صورتی که برنامه شما نیاز به انجام عملیات رو به رو شدن کاربر (مانند ارسال اعلان یا هشدار دادن به کاربر) داشته باشد، از زنگ هشدار بیدار شدن استفاده کنید. برای فهرستی از بهترین شیوههای AlarmManager، به زمانبندی هشدارها مراجعه کنید.
از AlarmManager
برای برنامهریزی وظایف پسزمینه، بهویژه کارهای تکراری یا پسزمینه شبکه استفاده نکنید. از WorkManager برای برنامهریزی وظایف پسزمینه استفاده کنید زیرا مزایای زیر را ارائه میکند:
- بچینگ - کارها با هم ترکیب می شوند تا مصرف باتری کاهش یابد
- پایداری - اگر دستگاه راه اندازی مجدد شود، کارهای برنامه ریزی شده WorkManager پس از اتمام راه اندازی مجدد اجرا می شوند.
- معیارها - مشاغل می توانند بر اساس شرایط اجرا شوند، مانند اینکه آیا دستگاه شارژ می شود یا نه یا WiFi در دسترس است
برای اطلاعات بیشتر، به راهنمای پردازش پسزمینه مراجعه کنید.
از AlarmManager
برای برنامهریزی عملیات زمانبندی که فقط در زمان اجرای برنامه معتبر هستند، استفاده نکنید (به عبارت دیگر، زمانی که کاربر از برنامه خارج میشود، عملیات زمانبندی باید لغو شود). در این مواقع از کلاس Handler
استفاده کنید زیرا استفاده از آن آسان تر و کارآمدتر است.
{% کلمه به کلمه %}
{% آخر کلمه %} برای شما توصیه می شود
{% کلمه به کلمه %} {% آخر کلمه %}
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],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)"]]