استفاده از رادیو بی سیم برای انتقال داده به طور بالقوه یکی از مهم ترین منابع تخلیه باتری برنامه شما است. برای به حداقل رساندن تخلیه باتری مرتبط با فعالیت شبکه، بسیار مهم است که بدانید مدل اتصال شما چگونه بر سخت افزار رادیویی زیرین تأثیر می گذارد.
این بخش دستگاه حالت رادیویی بی سیم را معرفی می کند و نحوه تعامل مدل اتصال برنامه شما با آن را توضیح می دهد. سپس چندین تکنیک ارائه می دهد که در صورت رعایت آنها، به حداقل رساندن اثر مصرف داده برنامه شما بر روی باتری کمک می کند.
دستگاه حالت رادیویی
رادیو بیسیم روی دستگاه کاربر شما دارای ویژگیهای داخلی ذخیرهسازی انرژی است که به کاهش میزان مصرف باتری کمک میکند. هنگامی که رادیو بی سیم به طور کامل فعال است، انرژی قابل توجهی مصرف می کند، اما در حالت غیرفعال یا در حالت آماده به کار، رادیو انرژی بسیار کمی مصرف می کند.
یکی از عوامل مهمی که باید به خاطر بسپارید این است که رادیو نمی تواند فوراً از حالت آماده به کار به حالت کاملاً فعال حرکت کند. یک دوره تاخیر در ارتباط با "روشن کردن" رادیو وجود دارد. بنابراین، باتری از حالتهای انرژی بالاتر به حالتهای انرژی پایینتر به آرامی تغییر میکند تا در صورت عدم استفاده، در مصرف انرژی صرفهجویی کند و در عین حال تلاش برای به حداقل رساندن تأخیر مرتبط با "روشن کردن" رادیو.
ماشین حالت برای یک رادیو شبکه معمولی 3G از سه حالت انرژی تشکیل شده است:
- قدرت کامل : زمانی که اتصال فعال است استفاده می شود و به دستگاه امکان می دهد داده ها را با بالاترین سرعت ممکن انتقال دهد.
- کم مصرف : حالت متوسطی که مصرف انرژی باتری را تا حدود 50 درصد کاهش می دهد.
- Standby : حالت حداقل مصرف انرژی که در طی آن هیچ اتصال شبکه ای فعال نیست.
در حالی که حالت های کم و آماده به کار باتری کمتری را تخلیه می کنند، همچنین تاخیر قابل توجهی را در درخواست های شبکه ایجاد می کنند. بازگشت به حالت کامل از حالت کم حدود 1.5 ثانیه طول می کشد و حرکت از حالت آماده به کار به حالت کامل می تواند بیش از 2 ثانیه طول بکشد.
برای به حداقل رساندن تأخیر، ماشین حالت از تأخیر برای به تعویق انداختن انتقال به حالتهای انرژی پایینتر استفاده میکند. شکل 1 از زمان بندی AT&T برای یک رادیو 3G معمولی استفاده می کند.
ماشین حالت رادیویی در هر دستگاه، به ویژه تاخیر انتقال مرتبط ("زمان دم") و تاخیر راه اندازی، بر اساس فناوری رادیویی بی سیم مورد استفاده (3G، LTE، 5G، و غیره) متفاوت خواهد بود و توسط دستگاه تعریف و پیکربندی می شود. شبکه حاملی که دستگاه روی آن کار می کند.
این صفحه یک ماشین حالت نماینده را برای یک رادیو بی سیم معمولی 3G، بر اساس داده های ارائه شده توسط AT&T توصیف می کند. با این حال، اصول کلی و بهترین شیوه های حاصل برای همه پیاده سازی های رادیویی بی سیم قابل اجرا هستند.
این رویکرد به ویژه برای مرور وب موبایل معمولی مؤثر است زیرا از تأخیر ناخواسته در هنگام مرور وب توسط کاربران جلوگیری می کند. زمان نسبتاً کم دم همچنین تضمین می کند که پس از پایان جلسه مرور، رادیو می تواند به حالت انرژی پایین تر حرکت کند.
متأسفانه، این رویکرد میتواند به برنامههای ناکارآمد در سیستمعاملهای مدرن گوشیهای هوشمند مانند اندروید منجر شود، جایی که برنامهها هم در پیشزمینه (جایی که تأخیر مهم است) و هم در پسزمینه (جایی که عمر باتری باید در اولویت قرار گیرد) اجرا میشوند.
چگونه برنامهها بر دستگاه حالت رادیویی تأثیر میگذارند
هر بار که یک اتصال شبکه جدید ایجاد می کنید، رادیو به حالت قدرت کامل منتقل می شود. در مورد ماشین حالت رادیویی معمولی 3G که قبلاً توضیح داده شد، در تمام مدت انتقال شما - به اضافه 5 ثانیه زمان اضافی - و به دنبال آن 12 ثانیه در حالت کم انرژی، در قدرت کامل باقی می ماند. بنابراین برای یک دستگاه معمولی 3G، هر جلسه انتقال داده باعث می شود رادیو حداقل 18 ثانیه انرژی بگیرد.
در عمل، این بدان معناست که برنامهای که یک ثانیه انتقال داده، سه بار در دقیقه انجام میدهد، رادیو بیسیم را همیشه فعال نگه میدارد و درست زمانی که وارد حالت آماده به کار میشود، آن را به قدرت بالا برمیگرداند.
در مقایسه، اگر همان برنامه انتقال دادههای خود را به صورت بستهبندی کند و هر دقیقه یک انتقال سه ثانیهای را اجرا کند، این کار رادیو را در مجموع تنها 20 ثانیه در هر دقیقه در حالت پرتوان نگه میدارد. این به رادیو اجازه می دهد در هر دقیقه 40 ثانیه در حالت آماده به کار باشد و در نتیجه مصرف باتری به میزان قابل توجهی کاهش یابد.
تکنیک های بهینه سازی
اکنون که متوجه شدید که دسترسی به شبکه چگونه بر عمر باتری تأثیر میگذارد، بیایید در مورد چند نکته صحبت کنیم که میتوانید برای کمک به کاهش تخلیه باتری انجام دهید و در عین حال تجربه کاربری سریع و روانی را نیز ارائه دهید.
بسته های انتقال داده
همانطور که در بخش قبل گفته شد، بستهبندی انتقال دادهها به گونهای که کمتر دادههای بیشتری را انتقال دهید، یکی از بهترین راهها برای بهبود کارایی باتری است.
البته اگر برنامه شما نیاز به دریافت یا ارسال فوری داده در پاسخ به اقدام کاربر داشته باشد، همیشه این کار امکان پذیر نیست. میتوانید با پیشبینی و واکشی از قبل دادهها، این موضوع را کاهش دهید. سناریوهای دیگر، مانند ارسال گزارشها یا تجزیه و تحلیلها به یک سرور و سایر انتقالهای داده غیر فوری و غیر فوری که از طریق برنامه شروع میشود، برای دستهبندی و بستهبندی بسیار مناسب هستند. برای نکاتی درباره زمانبندی انتقالهای شبکه پسزمینه، به بهینهسازی وظایف آغاز شده توسط برنامه مراجعه کنید.
داده ها را از قبل واکشی کنید
واکشی اولیه داده ها روش موثر دیگری برای کاهش تعداد جلسات انتقال داده مستقل است که برنامه شما اجرا می کند. با واکشی اولیه، زمانی که کاربر اقدامی را در برنامه شما انجام میدهد، برنامه پیشبینی میکند که به احتمال زیاد چه دادههایی برای سری بعدی اقدامات کاربر مورد نیاز خواهد بود و آن دادهها را به صورت پشت سر هم، از طریق یک اتصال، با ظرفیت کامل واکشی میکند.
با بارگذاری جلوی انتقالهای خود، تعداد فعالسازیهای رادیویی مورد نیاز برای دانلود دادهها را کاهش میدهید. در نتیجه، نه تنها عمر باتری را حفظ می کنید، بلکه تأخیر را نیز بهبود می بخشید، پهنای باند مورد نیاز را کاهش می دهید و زمان دانلود را کاهش می دهید.
واکشی اولیه همچنین با به حداقل رساندن تأخیر درون برنامه ناشی از انتظار برای تکمیل دانلودها قبل از انجام یک عمل یا مشاهده داده، تجربه کاربری بهبود یافته ای را فراهم می کند.
در اینجا یک مثال عملی است.
یک خبرخوان
بسیاری از برنامههای خبری تلاش میکنند تا پهنای باند را با دانلود سرفصلها تنها پس از انتخاب دستهبندی، مقالات کامل تنها زمانی که کاربر بخواهد آنها را بخواند، و تصاویر بندانگشتی را درست زمانی که به نمایش در میآیند، کاهش دهند.
با استفاده از این رویکرد، رادیو مجبور میشود برای اکثر جلسات اخبارخوانی کاربران، در حالی که سرفصلها را مرور میکنند، دستهها را تغییر میدهند و مقالات را میخوانند، فعال باقی بماند. نه تنها این، تغییر مداوم بین حالات انرژی منجر به تأخیر قابل توجهی در هنگام تعویض دسته ها یا خواندن مقالات می شود.
یک رویکرد بهتر این است که مقدار معقولی از دادهها را در هنگام راهاندازی از قبل واکشی کنید، که با اولین مجموعه از سرفصلها و تصاویر کوچک اخبار شروع میشود - تضمین زمان راهاندازی با تأخیر کم - و ادامه با سرفصلها و ریز عکسهای باقیمانده، و همچنین متن مقاله برای هر یک. مقاله حداقل از فهرست سرفصل اولیه موجود است.
جایگزین دیگر این است که هر عنوان، تصویر کوچک، متن مقاله، و احتمالاً حتی تصاویر کامل مقاله را از قبل واکشی کنید—معمولاً در پسزمینه در یک برنامه از پیش تعیینشده. این رویکرد خطر صرف پهنای باند و عمر باتری قابل توجهی را برای دانلود محتوایی که هرگز استفاده نشده است به همراه دارد، بنابراین باید با احتیاط اجرا شود.
ملاحظات اضافی
در حالی که واکشی اولیه داده ها دارای مزایای زیادی است، استفاده از واکشی اولیه بیش از حد تهاجمی نیز خطر افزایش مصرف باتری و استفاده از پهنای باند - و همچنین سهمیه دانلود - را با دانلود داده هایی که استفاده نمی شود، ایجاد می کند. همچنین مهم است که اطمینان حاصل شود که واکشی اولیه راه اندازی برنامه را به تاخیر نمی اندازد، در حالی که برنامه منتظر می ماند تا واکشی اولیه تکمیل شود. از نظر عملی، این ممکن است به معنای پردازش تدریجی دادهها یا آغاز انتقالهای متوالی باشد، به گونهای که دادههای مورد نیاز برای راهاندازی برنامه ابتدا دانلود و پردازش شوند.
اینکه چگونه دادهها را به طور تهاجمی واکشی میکنید به اندازه دادههایی که دانلود میشوند و احتمال استفاده از آنها بستگی دارد. به عنوان یک راهنمای تقریبی، بر اساس ماشین حالت که قبلاً توضیح داده شد، برای دادههایی که 50% احتمال استفاده در جلسه کاربر فعلی دارند، معمولاً میتوانید حدود 6 ثانیه (تقریباً 1 تا 2 مگابایت) قبل از هزینه احتمالی واکشی اولیه برای شروع، دانلود داده های استفاده نشده با صرفه جویی بالقوه عدم دانلود آن داده مطابقت دارد.
به طور کلی، واکشی از قبل داده ها به گونه ای عمل خوبی است که فقط باید هر 2 تا 5 دقیقه یک بار دانلود دیگری و به ترتیب 1 تا 5 مگابایت شروع کنید.
با پیروی از این اصل، دانلودهای بزرگ - مانند فایل های ویدئویی - باید به صورت تکه تکه در فواصل زمانی معین (هر 2 تا 5 دقیقه) بارگیری شوند و عملاً فقط داده های ویدیویی که احتمالاً در چند دقیقه آینده مشاهده می شوند، از قبل واکشی شوند.
یک راه حل این است که زمانبندی دانلود کامل فقط در صورت اتصال به Wi-Fi و احتمالاً فقط زمانی که دستگاه در حال شارژ است انجام شود. WorkManager API دقیقاً از این مورد استفاده میکند و به شما این امکان را میدهد تا کارهای پسزمینه را محدود کنید تا زمانی که دستگاه با معیارهای تعیینشده توسط توسعهدهنده، مانند شارژ کردن و اتصال به Wi-Fi مطابقت داشته باشد.
قبل از درخواست، اتصال را بررسی کنید
جستجوی سیگنال سلولی یکی از کم مصرف ترین عملیات در دستگاه تلفن همراه است. بهترین روش برای درخواستهای آغاز شده توسط کاربر این است که ابتدا اتصال را با استفاده ConnectivityManager
بررسی کنید، همانطور که در وضعیت اتصال مانیتور و اندازهگیری اتصال نشان داده شده است. اگر شبکه وجود نداشته باشد، برنامه میتواند با مجبور نکردن رادیو تلفن همراه به جستجو در باتری صرفهجویی کند. سپس میتوان درخواست را برنامهریزی کرد و به صورت دستهای با سایر درخواستها هنگام برقراری اتصال، انجام داد.
اتصالات استخر
یک استراتژی اضافی که میتواند علاوه بر دستهبندی و واکشی اولیه به شما کمک کند، تجمیع اتصالات شبکه برنامه شما است.
به طور کلی استفاده مجدد از اتصالات شبکه موجود کارآمدتر از راه اندازی اتصالات جدید است. استفاده مجدد از اتصالات همچنین به شبکه این امکان را می دهد که به طور هوشمندانه تری به ازدحام و مسائل مربوط به داده های شبکه واکنش نشان دهد.
HttpURLConnection
و اکثر کلاینتهای HTTP، مانند OkHttp ، به طور پیشفرض، ادغام اتصال و استفاده مجدد از یک اتصال را برای چندین درخواست فعال میکنند.
جمع بندی کنید و به آینده نگاه کنید
در این بخش، چیزهای زیادی در مورد رادیو بیسیم و چند استراتژی یاد گرفتید که میتوانید به طور گسترده از آنها برای ارائه تجربه کاربری سریع و پاسخگو و در عین حال کاهش مصرف باتری استفاده کنید.
در بخش بعدی، نگاهی مفصل به سه نوع متمایز از تعاملات شبکهای که در اکثر برنامهها رایج است، خواهیم داشت. شما درایورهای هر یک از این انواع و همچنین تکنیکها و APIهای مدرن برای مدیریت موثر این تعاملات را خواهید آموخت.