بیدارباشها مکانیزمی در API AlarmManager هستند که به توسعهدهندگان اجازه میدهند برای بیدار کردن دستگاه در زمان مشخص، زنگ هشدار تنظیم کنند. برنامه شما با فراخوانی یکی از متدهای set() در AlarmManager با استفاده از پرچمهای RTC_WAKEUP یا ELAPSED_REALTIME_WAKEUP ، زنگ هشدار بیدارباش را تنظیم میکند. هنگامی که زنگ هشدار بیدارباش فعال میشود، دستگاه از حالت کممصرف خارج میشود و در حین اجرای متدهای onReceive() یا onAlarm() زنگ هشدار ، قفل بیدارباش جزئی را نگه میدارد. اگر زنگهای هشدار بیدارباش بیش از حد فعال شوند، میتوانند باتری دستگاه را تخلیه کنند.
اگر برنامه شما بیش از حد دستگاه را روشن میکند، میتوانید از راهنماییهای این صفحه برای تشخیص و رفع مشکل استفاده کنید.
مشکل را برطرف کنید
AlarmManager در نسخههای اولیه پلتفرم اندروید معرفی شد، اما با گذشت زمان، بسیاری از موارد استفاده که قبلاً AlarmManager نیاز داشتند، اکنون توسط ویژگیهای جدیدتری مانند WorkManager بهتر ارائه میشوند. این بخش شامل نکاتی برای کاهش آلارمهای بیدارباش است، اما در درازمدت، مهاجرت برنامه خود را برای پیروی از توصیههای بخش بهترین شیوهها در نظر بگیرید.
مکانهایی را در برنامه خود که زنگهای هشدار بیدارباش را برنامهریزی میکنید، شناسایی کنید و تعداد دفعات فعال شدن این زنگها را کاهش دهید. در اینجا چند نکته آورده شده است:
به دنبال فراخوانیهای متدهای مختلف
set()درAlarmManagerباشید که شامل پرچمهایRTC_WAKEUPیاELAPSED_REALTIME_WAKEUPباشند.توصیه میکنیم نام بسته، کلاس یا متد خود را در نام تگ آلارم خود قرار دهید تا بتوانید به راحتی مکانی را در منبع خود که آلارم در آن تنظیم شده است، شناسایی کنید. در اینجا چند نکته اضافی وجود دارد:
- هرگونه اطلاعات شناسایی شخصی (PII) مانند آدرس ایمیل را در نام وارد نکنید. در غیر این صورت، دستگاه به جای نام آلارم،
_UNKNOWNرا ثبت میکند. - نام کلاس یا متد را به صورت برنامهنویسی شده، مثلاً با فراخوانی
getName()، دریافت نکنید، زیرا ممکن است توسط Proguard مبهمسازی شود. در عوض از یک رشتهی کدگذاری شدهی ثابت استفاده کنید. - به برچسبهای هشدار، شمارنده یا شناسههای منحصر به فرد اضافه نکنید. سیستم قادر به تجمیع هشدارهایی که به این صورت تنظیم شدهاند، نخواهد بود زیرا همه آنها شناسههای منحصر به فردی دارند.
- هرگونه اطلاعات شناسایی شخصی (PII) مانند آدرس ایمیل را در نام وارد نکنید. در غیر این صورت، دستگاه به جای نام آلارم،
پس از رفع مشکل، با اجرای دستور ADB زیر، تأیید کنید که زنگهای هشدار بیدارباش شما طبق انتظار کار میکنند:
adb shell dumpsys alarm
این دستور اطلاعاتی در مورد وضعیت سرویس سیستم هشدار روی دستگاه ارائه میدهد. برای اطلاعات بیشتر، به dumpsys مراجعه کنید.
بهترین شیوهها
فقط در صورتی از هشدارهای بیدارباش استفاده کنید که برنامه شما نیاز به انجام عملیاتی داشته باشد که کاربر با آن مواجه شود (مانند ارسال اعلان یا هشدار دادن به کاربر). برای مشاهده لیستی از بهترین شیوههای AlarmManager، به بخش زمانبندی هشدارها مراجعه کنید.
AlarmManager برای زمانبندی وظایف پسزمینه، به خصوص وظایف تکراری یا وظایف شبکهای پسزمینه، استفاده نکنید. از WorkManager برای زمانبندی وظایف پسزمینه استفاده کنید زیرا مزایای زیر را ارائه میدهد:
- دسته بندی - کارها با هم ترکیب میشوند تا مصرف باتری کاهش یابد
- پایداری - اگر دستگاه دوباره راهاندازی شود، کارهای برنامهریزیشده WorkManager پس از اتمام راهاندازی مجدد اجرا میشوند
- معیارها - کارها میتوانند بر اساس شرایطی اجرا شوند، مانند اینکه آیا دستگاه در حال شارژ است یا WiFi در دسترس است
برای اطلاعات بیشتر، به راهنمای پردازش پسزمینه مراجعه کنید.
AlarmManager برای زمانبندی عملیات زمانبندی که فقط در حین اجرای برنامه معتبر هستند استفاده نکنید (به عبارت دیگر، عملیات زمانبندی باید هنگام خروج کاربر از برنامه لغو شود). در این شرایط، از کلاس Handler استفاده کنید زیرا استفاده از آن آسانتر و بسیار کارآمدتر است.
برای شما توصیه میشود
- توجه: متن لینک زمانی نمایش داده میشود که جاوا اسکریپت غیرفعال باشد.
- قفلهای بیداری جزئی گیر کردهاند
- ANR ها
بیدارباشها مکانیزمی در API AlarmManager هستند که به توسعهدهندگان اجازه میدهند برای بیدار کردن دستگاه در زمان مشخص، زنگ هشدار تنظیم کنند. برنامه شما با فراخوانی یکی از متدهای set() در AlarmManager با استفاده از پرچمهای RTC_WAKEUP یا ELAPSED_REALTIME_WAKEUP ، زنگ هشدار بیدارباش را تنظیم میکند. هنگامی که زنگ هشدار بیدارباش فعال میشود، دستگاه از حالت کممصرف خارج میشود و در حین اجرای متدهای onReceive() یا onAlarm() زنگ هشدار ، قفل بیدارباش جزئی را نگه میدارد. اگر زنگهای هشدار بیدارباش بیش از حد فعال شوند، میتوانند باتری دستگاه را تخلیه کنند.
اگر برنامه شما بیش از حد دستگاه را روشن میکند، میتوانید از راهنماییهای این صفحه برای تشخیص و رفع مشکل استفاده کنید.
مشکل را برطرف کنید
AlarmManager در نسخههای اولیه پلتفرم اندروید معرفی شد، اما با گذشت زمان، بسیاری از موارد استفاده که قبلاً AlarmManager نیاز داشتند، اکنون توسط ویژگیهای جدیدتری مانند WorkManager بهتر ارائه میشوند. این بخش شامل نکاتی برای کاهش آلارمهای بیدارباش است، اما در درازمدت، مهاجرت برنامه خود را برای پیروی از توصیههای بخش بهترین شیوهها در نظر بگیرید.
مکانهایی را در برنامه خود که زنگهای هشدار بیدارباش را برنامهریزی میکنید، شناسایی کنید و تعداد دفعات فعال شدن این زنگها را کاهش دهید. در اینجا چند نکته آورده شده است:
به دنبال فراخوانیهای متدهای مختلف
set()درAlarmManagerباشید که شامل پرچمهایRTC_WAKEUPیاELAPSED_REALTIME_WAKEUPباشند.توصیه میکنیم نام بسته، کلاس یا متد خود را در نام تگ آلارم خود قرار دهید تا بتوانید به راحتی مکانی را در منبع خود که آلارم در آن تنظیم شده است، شناسایی کنید. در اینجا چند نکته اضافی وجود دارد:
- هرگونه اطلاعات شناسایی شخصی (PII) مانند آدرس ایمیل را در نام وارد نکنید. در غیر این صورت، دستگاه به جای نام آلارم،
_UNKNOWNرا ثبت میکند. - نام کلاس یا متد را به صورت برنامهنویسی شده، مثلاً با فراخوانی
getName()، دریافت نکنید، زیرا ممکن است توسط Proguard مبهمسازی شود. در عوض از یک رشتهی کدگذاری شدهی ثابت استفاده کنید. - به برچسبهای هشدار، شمارنده یا شناسههای منحصر به فرد اضافه نکنید. سیستم قادر به تجمیع هشدارهایی که به این صورت تنظیم شدهاند، نخواهد بود زیرا همه آنها شناسههای منحصر به فردی دارند.
- هرگونه اطلاعات شناسایی شخصی (PII) مانند آدرس ایمیل را در نام وارد نکنید. در غیر این صورت، دستگاه به جای نام آلارم،
پس از رفع مشکل، با اجرای دستور ADB زیر، تأیید کنید که زنگهای هشدار بیدارباش شما طبق انتظار کار میکنند:
adb shell dumpsys alarm
این دستور اطلاعاتی در مورد وضعیت سرویس سیستم هشدار روی دستگاه ارائه میدهد. برای اطلاعات بیشتر، به dumpsys مراجعه کنید.
بهترین شیوهها
فقط در صورتی از هشدارهای بیدارباش استفاده کنید که برنامه شما نیاز به انجام عملیاتی داشته باشد که کاربر با آن مواجه شود (مانند ارسال اعلان یا هشدار دادن به کاربر). برای مشاهده لیستی از بهترین شیوههای AlarmManager، به بخش زمانبندی هشدارها مراجعه کنید.
AlarmManager برای زمانبندی وظایف پسزمینه، به خصوص وظایف تکراری یا وظایف شبکهای پسزمینه، استفاده نکنید. از WorkManager برای زمانبندی وظایف پسزمینه استفاده کنید زیرا مزایای زیر را ارائه میدهد:
- دسته بندی - کارها با هم ترکیب میشوند تا مصرف باتری کاهش یابد
- پایداری - اگر دستگاه دوباره راهاندازی شود، کارهای برنامهریزیشده WorkManager پس از اتمام راهاندازی مجدد اجرا میشوند
- معیارها - کارها میتوانند بر اساس شرایطی اجرا شوند، مانند اینکه آیا دستگاه در حال شارژ است یا WiFi در دسترس است
برای اطلاعات بیشتر، به راهنمای پردازش پسزمینه مراجعه کنید.
AlarmManager برای زمانبندی عملیات زمانبندی که فقط در حین اجرای برنامه معتبر هستند استفاده نکنید (به عبارت دیگر، عملیات زمانبندی باید هنگام خروج کاربر از برنامه لغو شود). در این شرایط، از کلاس Handler استفاده کنید زیرا استفاده از آن آسانتر و بسیار کارآمدتر است.
برای شما توصیه میشود
- توجه: متن لینک زمانی نمایش داده میشود که جاوا اسکریپت غیرفعال باشد.
- قفلهای بیداری جزئی گیر کردهاند
- ANR ها
بیدارباشها مکانیزمی در API AlarmManager هستند که به توسعهدهندگان اجازه میدهند برای بیدار کردن دستگاه در زمان مشخص، زنگ هشدار تنظیم کنند. برنامه شما با فراخوانی یکی از متدهای set() در AlarmManager با استفاده از پرچمهای RTC_WAKEUP یا ELAPSED_REALTIME_WAKEUP ، زنگ هشدار بیدارباش را تنظیم میکند. هنگامی که زنگ هشدار بیدارباش فعال میشود، دستگاه از حالت کممصرف خارج میشود و در حین اجرای متدهای onReceive() یا onAlarm() زنگ هشدار ، قفل بیدارباش جزئی را نگه میدارد. اگر زنگهای هشدار بیدارباش بیش از حد فعال شوند، میتوانند باتری دستگاه را تخلیه کنند.
اگر برنامه شما بیش از حد دستگاه را روشن میکند، میتوانید از راهنماییهای این صفحه برای تشخیص و رفع مشکل استفاده کنید.
مشکل را برطرف کنید
AlarmManager در نسخههای اولیه پلتفرم اندروید معرفی شد، اما با گذشت زمان، بسیاری از موارد استفاده که قبلاً AlarmManager نیاز داشتند، اکنون توسط ویژگیهای جدیدتری مانند WorkManager بهتر ارائه میشوند. این بخش شامل نکاتی برای کاهش آلارمهای بیدارباش است، اما در درازمدت، مهاجرت برنامه خود را برای پیروی از توصیههای بخش بهترین شیوهها در نظر بگیرید.
مکانهایی را در برنامه خود که زنگهای هشدار بیدارباش را برنامهریزی میکنید، شناسایی کنید و تعداد دفعات فعال شدن این زنگها را کاهش دهید. در اینجا چند نکته آورده شده است:
به دنبال فراخوانیهای متدهای مختلف
set()درAlarmManagerباشید که شامل پرچمهایRTC_WAKEUPیاELAPSED_REALTIME_WAKEUPباشند.توصیه میکنیم نام بسته، کلاس یا متد خود را در نام تگ آلارم خود قرار دهید تا بتوانید به راحتی مکانی را در منبع خود که آلارم در آن تنظیم شده است، شناسایی کنید. در اینجا چند نکته اضافی وجود دارد:
- هرگونه اطلاعات شناسایی شخصی (PII) مانند آدرس ایمیل را در نام وارد نکنید. در غیر این صورت، دستگاه به جای نام آلارم،
_UNKNOWNرا ثبت میکند. - نام کلاس یا متد را به صورت برنامهنویسی شده، مثلاً با فراخوانی
getName()، دریافت نکنید، زیرا ممکن است توسط Proguard مبهمسازی شود. در عوض از یک رشتهی کدگذاری شدهی ثابت استفاده کنید. - به برچسبهای هشدار، شمارنده یا شناسههای منحصر به فرد اضافه نکنید. سیستم قادر به تجمیع هشدارهایی که به این صورت تنظیم شدهاند، نخواهد بود زیرا همه آنها شناسههای منحصر به فردی دارند.
- هرگونه اطلاعات شناسایی شخصی (PII) مانند آدرس ایمیل را در نام وارد نکنید. در غیر این صورت، دستگاه به جای نام آلارم،
پس از رفع مشکل، با اجرای دستور ADB زیر، تأیید کنید که زنگهای هشدار بیدارباش شما طبق انتظار کار میکنند:
adb shell dumpsys alarm
این دستور اطلاعاتی در مورد وضعیت سرویس سیستم هشدار روی دستگاه ارائه میدهد. برای اطلاعات بیشتر، به dumpsys مراجعه کنید.
بهترین شیوهها
فقط در صورتی از هشدارهای بیدارباش استفاده کنید که برنامه شما نیاز به انجام عملیاتی داشته باشد که کاربر با آن مواجه شود (مانند ارسال اعلان یا هشدار دادن به کاربر). برای مشاهده لیستی از بهترین شیوههای AlarmManager، به بخش زمانبندی هشدارها مراجعه کنید.
AlarmManager برای زمانبندی وظایف پسزمینه، به خصوص وظایف تکراری یا وظایف شبکهای پسزمینه، استفاده نکنید. از WorkManager برای زمانبندی وظایف پسزمینه استفاده کنید زیرا مزایای زیر را ارائه میدهد:
- دسته بندی - کارها با هم ترکیب میشوند تا مصرف باتری کاهش یابد
- پایداری - اگر دستگاه دوباره راهاندازی شود، کارهای برنامهریزیشده WorkManager پس از اتمام راهاندازی مجدد اجرا میشوند
- معیارها - کارها میتوانند بر اساس شرایطی اجرا شوند، مانند اینکه آیا دستگاه در حال شارژ است یا WiFi در دسترس است
برای اطلاعات بیشتر، به راهنمای پردازش پسزمینه مراجعه کنید.
AlarmManager برای زمانبندی عملیات زمانبندی که فقط در حین اجرای برنامه معتبر هستند استفاده نکنید (به عبارت دیگر، عملیات زمانبندی باید هنگام خروج کاربر از برنامه لغو شود). در این شرایط، از کلاس Handler استفاده کنید زیرا استفاده از آن آسانتر و بسیار کارآمدتر است.
برای شما توصیه میشود
- توجه: متن لینک زمانی نمایش داده میشود که جاوا اسکریپت غیرفعال باشد.
- قفلهای بیداری جزئی گیر کردهاند
- ANR ها