حفظ شارژ باتری و انرژی

بازدهی مصرف انرژی به‌ویژه در Wear OS اهمیت دارد. اصول طراحی Wear OS به‌طور قابل‌توجهی بر مصرف برق دستگاه تمرکز دارد زیرا ساعت دارای فرم فاکتور کوچک است و برای تعاملات کوتاه طراحی شده است.

درمقایسه با دستگاه‌های همراه بزرگ‌تر، دستگاه‌های Wear OS باتری‌های کوچک‌تری دارند، بنابراین هرگونه تخلیه باتری بیشتر قابل‌توجه است. علاوه‌براین، شارژ کردن دستگاه Wear OS نسبت‌به دستگاه همراه تلاش بیشتری ازسوی کاربر می‌طلبد. درحالی‌که کاربران می‌توانند دستگاه‌های همراهشان را در فواصل زمانی مختلف درطول روز شارژ کنند، باید دستگاه Wear OS را قبل‌از شارژ کردن از بدنشان جدا کنند.

برای بهبود بازدهی مصرف انرژی برنامه‌تان، این روال‌های مطلوب طراحی را دنبال کنید:

  • طراحی برنامه‌تان باید به‌خوبی از ضریب شکل Wear OS استفاده کند. نباید مستقیماً از برنامه تلفن همراه شما کپی کند.
  • از برنامه تلفن همراه موجودتان برای کمک به موارد استفاده خاص استفاده کنید. برای مثال، اینترنت و همگام‌سازی در ساعت گران است؛ درنظر بگیرید که آیا دستگاه همراه می‌تواند کار سنگین را انجام دهد و دستگاه Wear OS تغییرات داده را دریافت کند.
  • موارد استفاده خود را برای تعامل‌های کوتاه‌تر طراحی کنید.
  • درنظر بگیرید که از کدام رویدادهای Wear OS استفاده می‌کنید و این رویدادها هر چند وقت یک‌بار اتفاق می‌افتند.
  • هرزمان ممکن بود، کار برنامه‌تان را تا زمانی که ساعت درحال شارژ است به‌تعویق بیندازید. این امر به‌ویژه برای کارهای داده‌محور، مانند همگام‌سازی داده‌ها و سازمان‌دهی پایگاه‌های داده، صدق می‌کند.

    اگر دستگاه درحال شارژ شدن است و اتصال Wi-Fi دارد، کارها را زمان‌بندی کنید تا داده‌ها، تصاویر، و به‌روزرسانی‌هایی را که کاربر احتمالاً می‌خواهد در برنامه شما ببیند پیش‌بارگیری کند.

این راهنمای مصرف انرژی به شما کمک می‌کند متوجه شوید سیستم چه زمانی و چگونه برنامه‌تان را اجرا می‌کند، و چگونه می‌توانید زمان اجرای برنامه و تخلیه شارژ باتری را محدود کنید. برای کسب اطلاعات بیشتر درباره نحوه انجام کنش‌های خاص—مثل بار کردن برنامه یا پیمایش در فهرست—به راهنمایی‌های مربوط به عملکرد، مثل راهنمای عملکرد Compose در Wear OS مراجعه کنید.

نظارت بر مصرف باتری درطول زمان

برای تجزیه‌وتحلیل آمار باتری دستگاه Wear OS که برنامه شما را اجرا می‌کند، فرمان زیر را در پنجره پایانه در دستگاه توسعه خود وارد کنید:

adb shell dumpsys batterystats

کتابخانه‌ای در GitHub دارای تجزیه‌کننده آمار باتری است که می‌تواند برای اجرا همراه با این فرمان مفید باشد.

رویدادهایی که بر عمر باتری تأثیر می‌گذارند

قبل‌از اینکه به‌طور خاص درباره برنامه‌تان فکر کنید، بهتر است به‌طور کلی‌تر درباره رویدادهایی که در دستگاه Wear OS مصرف انرژی دارند فکر کنید.

جدول زیر تأثیر نسبی بر عمر باتری را در چندین رویداد رایج در برنامه‌های Wear OS نشان می‌دهد. میزان دقیق مصرف باتری در دستگاه‌های مختلف متفاوت است.

رویداد تأثیر بر عمر باتری نحوه کاهش
دسترسی به شبکه، ازجمله LTE و Wi-Fi بسیار بالا دسترسی به شبکه غیرضروری را تا زمانی که دستگاه درحال شارژ است به‌تعویق بیندازید.
روشن کردن صفحه‌نمایش و شروع حالت تعاملی زیاد کاربر را تشویق نکنید که صفحه‌نمایش را بیشتر از ضرورت روشن نگه دارد. تجربه‌ای ارائه دهید که از حالت همیشه روشن، که به حالت محیطی نیز معروف است، استفاده کند.
دسترسی به حسگر GPS زیاد درصورت امکان، تا زمانی که کاربر درخواست دسترسی به GPS را نداده است منتظر بمانید.
استفاده از واحد پردازش مرکزی را بالا نگه می‌دارد زیاد مصرف جریان‌ها بااستفاده از Jetpack Compose.
دسترسی به حسگر ضربان قلب متوسط از زمان بیداری پردازنده هنگام دریافت تماس‌های برگشتی از میانای برنامه‌سازی کاربردی حسگر استفاده کنید، مثلاً هنگام استفاده از خدمات سلامت در Wear OS.
دسترسی به دستگاهی دیگر ازطریق بلوتوث متوسط جلسه‌ها را کوتاه نگه دارید.
نگه‌داشتن قفل بیداری متوسط ایجاد دستی wakelock را کاهش دهید و از WorkManager استفاده کنید.

به‌حداقل رساندن مدت روشن بودن صفحه

در برنامه Wear OS، این اصول استفاده از صفحه‌نمایش را دنبال کنید:

  • قفل‌های روشن بودن صفحه‌نمایش: تا حد امکان از آن‌ها اجتناب کنید. برای آزمایش، نمایشگر همیشه روشن را در تنظیمات سیستم خاموش کنید و ببینید آیا صفحه‌نمایش در مدت زمان وقفه خاموش می‌شود یا نه.
  • پویانمایی‌ها: پویانمایی‌های پیچیده را به‌حداقل برسانید و درعوض روی انتقال‌های کوتاه تمرکز کنید تا ظاهری حرفه‌ای‌تر داشته باشید. به‌طور خاص، از پویانمایی‌ها و حلقه‌های طولانی‌مدت اجتناب کنید. اگر حلقه لازم است، بین حلقه‌ها مکثی اضافه کنید که حداقل به‌اندازه خود پویانمایی باشد.
  • زمان بیداری در حالت محیطی: درصورت لزوم، از نمایشگر همیشه روشن پشتیبانی کنید، مثلاً برای موارد استفاده تناسب اندام. اگر برنامه شما به «همیشه روشن» نیاز دارد، این توصیه‌ها برای «حالت گزینشی» را دنبال کنید.

کمینه کردن استفاده از واحد پردازش مرکزی

در برنامه Wear OS، این اصول استفاده از CPU را دنبال کنید:

  • استفاده را کوتاه نگه دارید.
  • همه عملیات مرتبط را دسته‌بندی کنید تا زمان بیکاری فرایند برنامه‌تان به حداکثر برسد.

به‌حداقل رساندن قفل‌های بیدارباش

در بیشتر موارد، از هرگونه عملیاتی که مانع از به‌خواب رفتن برنامه می‌شود، مثل wakelocks، اجتناب کنید. برای مثال، در برنامه‌های سلامتی و تناسب اندام، تمرین‌های طولانی‌مدت به wakelock نیاز ندارند. از زمان بیداری پردازنده هنگام دریافت فراخوانی‌های برگشتی از میانای برنامه‌سازی کاربردی حسگر استفاده کنید، مثلاً هنگام استفاده از خدمات سلامت در Wear OS.

در برخی موارد، دریافت «قفل بیداری» اشکالی ندارد، مثلاً وقتی برنامه شما یکی از کارهای زیر را انجام می‌دهد:

  • رسانه را در پس‌زمینه پخش می‌کند.
  • از WorkManager یا JobScheduler استفاده می‌کند. (سیستم هنگام اجرای کار در پس‌زمینه، ازطرف شما قفل بیدارباش را نگه می‌دارد.)

برای اشکال‌زدایی قفل‌های بیداری به‌صورت محلی، از بازرس وظیفه پس‌زمینه، ردیابی سیستم، یا adb shell dumpsys batterystats در Android Studio استفاده کنید تا موارد تکی قفل‌های بیداری طولانی و همچنین خلاصه‌ای از تعداد کل و مدت‌زمان قفل‌های بیداری نگه‌داشته‌شده را بررسی کنید. تعداد و مدت زمان قفل‌های بیداری که برنامه شما نگه می‌دارد را با الگوهای استفاده تعاملی برنامه خود مقایسه کنید:

  • بررسی قفل‌های بیداری غیرمنتظره.
  • اگر مدت‌زمان بیشتر از حد انتظار است، بررسی کنید که آیا کار به‌دلیل وابستگی خاصی، مثل دردسترس بودن شبکه، مسدود شده است یا نه.

بررسی کنید که چگونه برنامه‌تان غیرفعال می‌شود

درنظر بگیرید که وقتی رویدادهای کلیدی دستگاه رخ می‌دهد، برنامه فعال چه کاری انجام می‌دهد، مثلاً:

  • صفحه‌نمایش خاموش می‌شود و دستگاه وارد حالت گزینشی می‌شود.
  • برنامه با تند کشیدن بسته شود.

برای تجزیه‌وتحلیل فعالیت برنامه، از ابزارهای نشان‌داده‌شده در بخش‌های زیر استفاده کنید.

Power Profiler

Power Profiler در منو «استودیو Android» با انتخاب View > Tool Windows > Profiler قابل‌دسترسی است:

  1. ردیابی سیستم را هنگام خاموش شدن صفحه و ورود دستگاه به حالت محیطی بازرسی کنید.
  2. به‌دنبال کارهایی که ادامه دارند و سطح استفاده از CPU دستگاه بگردید.

Perfetto

Perfetto به شما امکان می‌دهد ردگیری را ضبط کنید و سپس برنامه‌تان را بازرسی کنید تا ببینید آیا رشته‌ای وجود دارد که وقتی صفحه‌نمایش خاموش می‌شود، دستگاه وارد حالت محیطی می‌شود، یا کاربر فعالیت برنامه‌تان را می‌بندد کاری انجام دهد یا نه.

رویدادهای سفارشی را برای علامت‌گذاری رویدادهای مهم برنامه‌تان، ازجمله رویدادهای مختص دامنه، تعریف کنید. برای برنامه رسانه، این شامل کارهایی مانند واکشی فهرست‌های پخش، بارگیری یک فایل رسانه‌ای خاص، شروع بازپخش، و توقف بازپخش می‌شود. با تعریف کردن این رویدادها، می‌توانید آن‌ها را در Perfetto ببینید و زمان‌بندی آن‌ها را با مصرف برق و CPU برنامه‌تان مقایسه کنید.

همچنین می‌توانید از Android CLI برای نصب مهارت android-profiler (android skills add android-profiler) استفاده کنید که به عامل‌های هوش مصنوعی امکان می‌دهد ردگیری‌های سیستم Perfetto را از خط فرمان ضبط کنند و ریل‌های برق، قفل‌های بیداری، و حالت‌های تعلیق دستگاه را تجزیه‌وتحلیل کنند.

تجزیه‌وتحلیل کارهای زمان‌بندی‌شده برنامه

کارهای زمان‌بندی‌شده، بااستفاده از WorkManager، به شما امکان می‌دهند کارهای پس‌زمینه را در برنامه‌تان انجام دهید. اگرچه برخی‌از کارهای پس‌زمینه باید دوره‌ای باشند، کارها را خیلی مکرر یا برای مدت طولانی اجرا نکنید، زیرا این کار می‌تواند باتری دستگاه را خالی کند.

از نظارتگر وظایف پس‌زمینه Android Studio (مشاهده > پنجره‌های ابزار > بازرسی برنامه) استفاده کنید یا adb shell dumpsys jobscheduler و adb shell dumpsys batterystats را اجرا کنید تا اجرای کارهای زمان‌بندی‌شده و کارگران را بازرسی کنید. بسامد اجرا و مدت کل را بررسی کنید:

  • اگر کاری به‌دفعات زیاد اجرا می‌شود، پیشنهاد می‌شود این بسامد را کاهش دهید.
  • بررسی کنید که زمان اجرای کل با آنچه انتظار دارید مطابقت داشته باشد و به‌طور قابل‌توجهی طولانی‌تر نباشد.

همچنین می‌توانید ردیابی سیستم را ضبط کنید تا اجرای کار را با فعالیت برنامه خود در یک خط زمان مرتبط کنید. موارد زیر را درنظر بگیرید:

  • برای برنامه شما، مدت اجرای آن باید منطقی باشد.
  • درنظر بگیرید که آیا کارها زمانی انجام می‌شود که برنامه شما درحال اجرا است یا اینکه کارها نشان‌دهنده کار پس‌زمینه‌ای دوره‌ای است.

حسگرها

دستگاه‌های Wear OS حسگرهای مختلفی دارند، مثلاً GPS. در بیشتر موارد، به‌جای تعامل مستقیم با SensorManager، از Health Services در Wear OS استفاده کنید. در بسیاری از موارد، «خدمات سلامت» به‌طور هوشمندانه داده‌ها را دسته‌بندی می‌کند تا عملکرد باتری را بهبود بخشد.

برای تجزیه‌وتحلیل استفاده از حسگر در برنامه‌تان، فرمان زیر را در پنجره پایانه در ماشین توسعه نرم‌افزارتان اجرا کنید:

adb shell dumpsys sensorservice

نتایج این فرمان موارد زیر را نشان می‌دهد:

  • ثبت‌های حسگر فعلی و قبلی.
  • پیکربندی حسگر، ازجمله دسته‌بندی درصورت تنظیم.
  • داده‌های نمونه‌گیری‌شده اخیر.

لغو ثبت‌نام آزمایشی از حسگرها

برای بررسی اینکه آیا برنامه شما طبق انتظار واکشی داده‌های حسگر را متوقف می‌کند یا نه، سناریوهای زیر را آزمایش کنید:

  1. برنامه را با تند کشیدن ببندید.
  2. با کف دست روی صفحه ضربه بزنید. این کار یا صفحه‌نمایش را خاموش می‌کند یا صفحه‌نمایش را در حالت محیطی قرار می‌دهد.

از فرمان ADB در بخش قبلی استفاده کنید تا بررسی کنید آیا حسگر به‌درستی به‌عنوان لغوثبت‌شده نشان داده می‌شود یا نه.

لایه داده‌ای

هنگام استفاده از Data Layer API، هر انتقال مقداری انرژی مصرف می‌کند. به‌ویژه، اگر از این میانای برنامه‌سازی کاربردی برای ارسال داده استفاده می‌کنید، برنامه‌تان باید برای دریافت داده بیدار شود. به این دلایل، در استفاده از این API محتاط باشید.

برخی‌از روال‌های مطلوب دیگر برای استفاده از Data Layer API عبارت‌اند از:

  • قبل‌از راه‌اندازی شنونده بااستفاده از WearableListenerService، صبر کنید تا برنامه‌تان فعال شود.
  • از «میانای برنامه‌سازی کاربردی لایه داده» برای پینگ کردن دوره‌ای ساعت به‌منظور بررسی دردسترس بودن دستگاه یا برنامه همپا استفاده نکنید. با ارسال مکرر پیام، برنامه‌تان رادیو و فرایند برنامه ازراه‌دور را بیدار می‌کند که باعث می‌شود باتری دستگاه بیش‌ازحد لازم تخلیه شود. به‌جای آن، از CapabilityClient برای تشخیص دردسترس بودن دستگاه و قابلیت‌ها استفاده کنید، یا فقط وقتی وضعیت تغییر می‌کند پیام ارسال کنید.
  • به‌جای پیکربندی به‌روزرسانی‌های سریع، تغییرات وضعیت را انتقال دهید. این تغییرات وضعیت به دستگاه Wear OS امکان می‌دهد محاسبات داده‌های محلی را انجام دهد، مثلاً وقتی جلسه تمرین شروع می‌شود.

    فقط تغییرات وضعیتی را انتقال دهید که واسط کاربر شما را به‌روز می‌کند. برای مثال، اگر صفحه فعالیت شما فقط «کیلومترهای دویده» را با یک رقم اعشار نشان می‌دهد، هربار که کاربر یک متر دیگر به جلو حرکت می‌کند، تغییر وضعیت را به Wear OS ارسال نکنید.

برای تجزیه‌وتحلیل استفاده از «میانای برنامه‌سازی کاربردی لایه داده» در برنامه‌تان، فرمان زیر را در پنجره پایانه در دستگاه توسعه‌تان اجرا کنید:

adb shell dumpsys activity service WearableService

نتایج این فرمان شامل موارد زیر است:

  • RpcService: به شما امکان می‌دهد ببینید هرچندوقت یک‌بار و کدام مسیرها بااستفاده از MessageClient فراخوانده می‌شوند.
  • DataService: به شما امکان می‌دهد ببینید موارد داده چند وقت یک‌بار بااستفاده از DataClient تنظیم می‌شوند.

برنامه‌های سلامتی و تناسب اندام

اگر برنامه سلامتی و تناسب اندام دارید، از خدمات سلامتی برای بهینه‌سازی استفاده برنامه‌تان از حسگرها استفاده کنید.

  • برای ExerciseClient، از ردیابی سیستم، Perfetto، یا adb shell dumpsys batterystats برای درستی‌سنجی عملکرد صحیح در حالت محیطی استفاده کنید. بررسی کنید که برنامه شما برای دریافت داده‌های ExerciseUpdate بیشتر از هر یک یا دو دقیقه بیدار نشود.
  • برای پایش سلامت عمومی در تمام طول روز، از PassiveMonitoringClient استفاده کنید، همان‌طور که در راهنمای نحوه پایش داده‌های سلامتی و تناسب اندام در پس‌زمینه شرح داده شده است.

کاشی‌ها و عملکردهای اضافی

اگر برنامه‌تان از کاشی یا افزونه پشتیبانی می‌کند، این روال‌های مطلوب را دنبال کنید:

  • بازآوری خودکار را غیرفعال کنید یا نرخ بازآوری را به ۲ ساعت یا بیشتر افزایش دهید.
  • از پیام‌رسانی ابریِ Firebase‏ (FCM) یا کارهای برنامه‌ریزی‌شده مناسب برای ارسال به‌روزرسانی‌های داده استفاده کنید. مراقب باشید که نرخ به‌روزرسانی‌ها سریع نباشد، زیرا این امر می‌تواند باعث شود سیستم کار تکراری را با نرخی سریع‌تر از نرخی که کاربر یا پلاتفرم می‌تواند به داده‌های موردنیاز برای انجام آن کار دسترسی پیدا کند زمان‌بندی کند.
  • وقتی کاربر با کاشی یا چیدمان شما تعامل ندارد، برای آن کار زمان‌بندی نکنید.
  • از رویکردهای آفلاین-اول استفاده کنید.
  • یک پایگاه داده را در برنامه اصلی، کاشی‌ها، و عوارض هم‌رسانی کنید. این کار به حفظ سازگاری داده‌ها در سطوح واسط کاربر نیز کمک می‌کند.