هنگامی که کاربر دستگاه مجهز به اندروید خود را بیکار می گذارد، برای جلوگیری از تخلیه باتری، به سرعت به حالت تعلیق می رود. با این حال، مواقعی وجود دارد که یک برنامه باید از رفتن CPU به حالت تعلیق جلوگیری کند. در برخی موارد، برنامه ممکن است نیاز داشته باشد هنگام کار کردن، صفحه نمایش را روشن نگه دارد. در موارد دیگر، برنامه نیازی به روشن نگه داشتن صفحه نمایش ندارد، اما همچنان به CPU برای فعال بودن نیاز دارد.
رویکرد شما بستگی به نیازهای برنامه شما دارد. با این حال، یک قانون کلی این است که شما باید از سبک ترین رویکرد ممکن استفاده کنید تا تاثیر برنامه خود را بر منابع سیستم به حداقل برسانید. این سند به شما کمک می کند تا فناوری اندروید مناسب را برای شرایط خود انتخاب کنید.
تکنولوژی مناسب را انتخاب کنید
بهترین گزینه برای بیدار نگه داشتن دستگاه شما به نیازهای برنامه شما بستگی دارد. این بخش به شما کمک می کند تا روش مناسب را انتخاب کنید.
- آیا برنامه شما نیاز به روشن نگه داشتن صفحه نمایش دارد؟
- اگر بله ، روشن نگه داشتن صفحه را ببینید. ممکن است یک API با هدف خاص وجود داشته باشد که آنچه شما نیاز دارید را انجام دهد. به عنوان مثال، اگر از رابط کاربری تماس تلفنی استفاده میکنید، میتوانید از چارچوب Android Telecom استفاده کنید که در صورت لزوم صفحه را روشن نگه میدارد. اگر API با هدف خاصی برای موقعیت شما وجود ندارد، می توانید از API
keepScreenOn
استفاده کنید.
- اگر بله ، روشن نگه داشتن صفحه را ببینید. ممکن است یک API با هدف خاص وجود داشته باشد که آنچه شما نیاز دارید را انجام دهد. به عنوان مثال، اگر از رابط کاربری تماس تلفنی استفاده میکنید، میتوانید از چارچوب Android Telecom استفاده کنید که در صورت لزوم صفحه را روشن نگه میدارد. اگر API با هدف خاصی برای موقعیت شما وجود ندارد، می توانید از API
- آیا برنامه شما یک سرویس پیشزمینه اجرا میکند و باید دستگاه را هنگامی که صفحه نمایش خاموش است در حین اجرای سرویس، بیدار نگه دارید؟
- اگر خیر ، نیازی نیست دستگاه را بیدار نگه دارید. اگر کاربر به طور فعال با برنامه تعامل داشته باشد، دستگاه بیدار می ماند. اگر کاربر با برنامه شما تعاملی ندارد و شما سرویس پیش زمینه را اجرا نمی کنید، باید در صورت لزوم به دستگاه اجازه دهید به حالت تعلیق برود. اگر فقط باید مطمئن شوید زمانی که کاربر از برنامه دور است برخی از کارها انجام می شود، برای یافتن بهترین گزینه، به مستندات کارهای پس زمینه مراجعه کنید.
- اگر بله ، ابتدا تأیید کنید که واقعاً باید از یک سرویس پیش زمینه استفاده کنید. بسته به موقعیت شما، ممکن است برخی از API های با هدف خاص وجود داشته باشد که می توانید به جای یک سرویس پیش زمینه، از آن برای برآورده کردن نیاز خود استفاده کنید. می توانید اطلاعات مربوط به این موارد را در اسناد خدمات پیش زمینه بیابید. به عنوان مثال، اگر نیاز به ردیابی مکان کاربر دارید، ممکن است بتوانید از API geofencing به جای سرویس پیش زمینه
location
استفاده کنید.
- آیا زمانی که سرویس پیش زمینه در حال اجراست و صفحه نمایش دستگاه خاموش است، دستگاه به حالت تعلیق درآید، برای تجربه کاربر مضر خواهد بود؟ (به عنوان مثال، اگر از یک سرویس پیش زمینه برای به روز رسانی اعلان ها استفاده می کنید، اگر دستگاه به حالت تعلیق درآمده باشد، تجربه کاربری بدی نخواهد بود.)
- اگر خیر ، از wakelock استفاده نکنید. زمانی که کاربر با دستگاه خود درگیر شد، این عمل بهطور خودکار از سر گرفته میشود، که آن را از حالت تعلیق خارج میکند.
- اگر بله ، ممکن است لازم باشد از یک قفل بیدار استفاده کنید . با این حال، همچنان باید بررسی کنید که آیا در حال حاضر از یک API استفاده میکنید یا عملی را انجام میدهید که یک wake lock را از طرف شما انجام میدهد، همانطور که در اقداماتی که دستگاه را بیدار نگه میدارد بحث شده است.
اقداماتی که دستگاه را بیدار نگه می دارد
اگر برنامه شما یکی از کارهای زیر را انجام میدهد، نیازی نیست خودتان یک قفل بیپروا تنظیم کنید. اقدامات و APIهای زیر همگی دستگاه را برای شما بیدار نگه می دارند.
- اگر در حال پخش صدا هستید، سیستم صوتی یک wake lock را برای شما تنظیم و مدیریت می کند. نیازی نیست خودتان این کار را انجام دهید
- اگر از APIهای زمانبندی کار یا کتابخانههایی مانند WorkManager ،
JobScheduler
یاDownloadManager
استفاده میکنید، سیستم یا کتابخانه از طرف شما یک wake lock دریافت میکند. - اگر از Media3 ExoPlayer استفاده میکنید، میتوانید از
ExoPlayer.setWakeMode()
استفاده کنید تا پخشکننده یک wake lock برای شما تنظیم کند. - سنسورهای دستگاه خاصی سنسورهای بیدار شدن هستند. میتوانید از
SensorManager
استفاده کنید تا این حسگرها وقتی دادههایی برای گزارش دارند، دستگاه را بیدار کنند. برای بررسی اینکه آیا یک سنسور یک حسگر بیداری است، باSensor.isWakeUpSensor
تماس بگیرید.
همچنین ببینید
،هنگامی که کاربر دستگاه مجهز به اندروید خود را بیکار می گذارد، برای جلوگیری از تخلیه باتری، به سرعت به حالت تعلیق می رود. با این حال، مواقعی وجود دارد که یک برنامه باید از رفتن CPU به حالت تعلیق جلوگیری کند. در برخی موارد، برنامه ممکن است نیاز داشته باشد هنگام کار کردن، صفحه نمایش را روشن نگه دارد. در موارد دیگر، برنامه نیازی به روشن نگه داشتن صفحه نمایش ندارد، اما همچنان به CPU برای فعال بودن نیاز دارد.
رویکرد شما بستگی به نیازهای برنامه شما دارد. با این حال، یک قانون کلی این است که شما باید از سبک ترین رویکرد ممکن استفاده کنید تا تاثیر برنامه خود را بر منابع سیستم به حداقل برسانید. این سند به شما کمک می کند تا فناوری اندروید مناسب را برای شرایط خود انتخاب کنید.
تکنولوژی مناسب را انتخاب کنید
بهترین گزینه برای بیدار نگه داشتن دستگاه شما به نیازهای برنامه شما بستگی دارد. این بخش به شما کمک می کند تا روش مناسب را انتخاب کنید.
- آیا برنامه شما نیاز به روشن نگه داشتن صفحه نمایش دارد؟
- اگر بله ، روشن نگه داشتن صفحه را ببینید. ممکن است یک API با هدف خاص وجود داشته باشد که آنچه شما نیاز دارید را انجام دهد. به عنوان مثال، اگر از رابط کاربری تماس تلفنی استفاده میکنید، میتوانید از چارچوب Android Telecom استفاده کنید که در صورت لزوم صفحه را روشن نگه میدارد. اگر API با هدف خاصی برای موقعیت شما وجود ندارد، می توانید از API
keepScreenOn
استفاده کنید.
- اگر بله ، روشن نگه داشتن صفحه را ببینید. ممکن است یک API با هدف خاص وجود داشته باشد که آنچه شما نیاز دارید را انجام دهد. به عنوان مثال، اگر از رابط کاربری تماس تلفنی استفاده میکنید، میتوانید از چارچوب Android Telecom استفاده کنید که در صورت لزوم صفحه را روشن نگه میدارد. اگر API با هدف خاصی برای موقعیت شما وجود ندارد، می توانید از API
- آیا برنامه شما یک سرویس پیشزمینه اجرا میکند، و باید دستگاه را هنگامی که صفحه نمایش خاموش است در حین اجرای سرویس، بیدار نگه دارید؟
- اگر خیر ، نیازی نیست دستگاه را بیدار نگه دارید. اگر کاربر به طور فعال با برنامه تعامل داشته باشد، دستگاه بیدار می ماند. اگر کاربر با برنامه شما تعاملی ندارد و شما سرویس پیش زمینه را اجرا نمی کنید، باید در صورت لزوم به دستگاه اجازه دهید به حالت تعلیق برود. اگر فقط باید مطمئن شوید زمانی که کاربر از برنامه دور است برخی از کارها انجام می شود، برای یافتن بهترین گزینه، به مستندات کارهای پس زمینه مراجعه کنید.
- اگر بله ، ابتدا تأیید کنید که واقعاً باید از یک سرویس پیش زمینه استفاده کنید. بسته به موقعیت شما، ممکن است برخی از API های با هدف خاص وجود داشته باشد که می توانید به جای یک سرویس پیش زمینه، از آن برای رفع نیاز خود استفاده کنید. می توانید اطلاعات مربوط به این موارد را در اسناد خدمات پیش زمینه بیابید. به عنوان مثال، اگر نیاز به ردیابی موقعیت مکانی کاربر دارید، ممکن است بتوانید از API geofencing به جای سرویس پیش زمینه
location
استفاده کنید.
- آیا اگر دستگاه در حین اجرا شدن سرویس پیش زمینه و خاموش بودن صفحه نمایش دستگاه به حالت تعلیق درآید، برای تجربه کاربر مضر خواهد بود؟ (به عنوان مثال، اگر از یک سرویس پیش زمینه برای به روز رسانی اعلان ها استفاده می کنید، اگر دستگاه به حالت تعلیق درآمده باشد، تجربه کاربری بدی نخواهد بود.)
- اگر خیر ، از wakelock استفاده نکنید. زمانی که کاربر با دستگاه خود درگیر شد، این عمل بهطور خودکار از سر گرفته میشود، که آن را از حالت تعلیق خارج میکند.
- اگر بله ، ممکن است لازم باشد از یک قفل بیدار استفاده کنید . با این حال، همچنان باید بررسی کنید که آیا در حال حاضر از یک API استفاده میکنید یا عملی را انجام میدهید که یک wake lock را از طرف شما انجام میدهد، همانطور که در اقداماتی که دستگاه را بیدار نگه میدارد بحث شده است.
اقداماتی که دستگاه را بیدار نگه می دارد
اگر برنامه شما هر یک از کارهای زیر را انجام می دهد، نیازی نیست خودتان یک قفل بیدارسازی تنظیم کنید. اقدامات و APIهای زیر همگی دستگاه را برای شما بیدار نگه می دارند.
- اگر در حال پخش صدا هستید، سیستم صوتی یک wake lock را برای شما تنظیم و مدیریت می کند. نیازی نیست خودتان این کار را انجام دهید
- اگر از APIهای زمانبندی کار یا کتابخانههایی مانند WorkManager ،
JobScheduler
یاDownloadManager
استفاده میکنید، سیستم یا کتابخانه از طرف شما یک wake lock دریافت میکند. - اگر از Media3 ExoPlayer استفاده می کنید، می توانید از
ExoPlayer.setWakeMode()
استفاده کنید تا پخش کننده یک wake lock برای شما تنظیم کند. - سنسورهای دستگاه خاصی سنسورهای بیدار شدن هستند. میتوانید از
SensorManager
استفاده کنید تا این حسگرها وقتی دادههایی برای گزارش دارند، دستگاه را بیدار کنند. برای بررسی اینکه آیا یک سنسور یک حسگر بیداری است، باSensor.isWakeUpSensor
تماس بگیرید.