استفاده از رادیو بیسیم برای انتقال داده، به طور بالقوه یکی از مهمترین منابع تخلیه باتری برنامه شماست. برای به حداقل رساندن تخلیه باتری مرتبط با فعالیت شبکه، بسیار مهم است که بدانید مدل اتصال شما چگونه بر سختافزار رادیویی زیربنایی تأثیر میگذارد.
این بخش، دستگاه وضعیت رادیویی بیسیم را معرفی میکند و نحوه تعامل مدل اتصال برنامه شما با آن را توضیح میدهد. سپس چندین تکنیک ارائه میدهد که در صورت رعایت، به حداقل رساندن تأثیر مصرف داده برنامه شما بر باتری کمک میکند.
دستگاه حالت رادیویی
رادیو بیسیم موجود در دستگاه کاربر شما دارای ویژگیهای صرفهجویی در مصرف برق داخلی است که به حداقل رساندن میزان مصرف باتری کمک میکند. هنگامی که کاملاً فعال است، رادیو بیسیم برق قابل توجهی مصرف میکند، اما هنگامی که غیرفعال یا در حالت آماده به کار است، رادیو برق بسیار کمی مصرف میکند.
یک عامل مهم که باید به خاطر داشت این است که رادیو نمیتواند فوراً از حالت آماده به کار به حالت کاملاً فعال تغییر کند. یک دوره تأخیر مرتبط با "روشن کردن" رادیو وجود دارد. بنابراین باتری به آرامی از حالتهای انرژی بالاتر به حالتهای انرژی پایینتر منتقل میشود تا در صورت عدم استفاده، در عین تلاش برای به حداقل رساندن تأخیر مرتبط با "روشن کردن" رادیو، در مصرف انرژی صرفهجویی شود.
ماشین حالت برای یک رادیوی شبکه 3G معمولی از سه حالت انرژی تشکیل شده است:
- قدرت کامل : زمانی استفاده میشود که اتصال فعال است و به دستگاه اجازه میدهد دادهها را با بالاترین سرعت ممکن منتقل کند.
- کم مصرف : حالت میانی که مصرف باتری را حدود ۵۰٪ کاهش میدهد.
- آماده به کار : حالت با حداقل مصرف برق که در طی آن هیچ اتصال شبکهای فعال نیست.
اگرچه حالتهای کم مصرف و آماده به کار باتری را به طور قابل توجهی کمتر مصرف میکنند، اما تأخیر قابل توجهی نیز در درخواستهای شبکه ایجاد میکنند. بازگشت به توان کامل از حالت کم مصرف حدود ۱.۵ ثانیه طول میکشد و تغییر از حالت آماده به کار به توان کامل میتواند بیش از ۲ ثانیه طول بکشد.
برای به حداقل رساندن تأخیر، ماشین حالت از یک تأخیر برای به تعویق انداختن انتقال به حالتهای انرژی پایینتر استفاده میکند. شکل 1 از زمانبندیهای AT&T برای یک رادیوی معمولی 3G استفاده میکند.

شکل ۱. یک دستگاه حالت رادیویی بیسیم معمولی 3G.
دستگاه حالت رادیویی در هر دستگاه، به ویژه تأخیر انتقال ("زمان دم") و تأخیر راهاندازی مرتبط، بر اساس فناوری رادیویی بیسیم مورد استفاده (3G، LTE، 5G و غیره) متفاوت خواهد بود و توسط شبکه حاملی که دستگاه روی آن کار میکند، تعریف و پیکربندی میشود.
این صفحه یک ماشین حالت نمونه برای یک رادیو بیسیم 3G معمولی را بر اساس دادههای ارائه شده توسط AT&T شرح میدهد. با این حال، اصول کلی و بهترین شیوههای حاصل برای همه پیادهسازیهای رادیو بیسیم قابل اجرا هستند.
این رویکرد به ویژه برای مرور وب معمولی با موبایل مؤثر است زیرا از تأخیر ناخواسته در حین مرور وب توسط کاربران جلوگیری میکند. زمان تأخیر نسبتاً کم همچنین تضمین میکند که پس از پایان یک جلسه مرور، رادیو میتواند به حالت انرژی کمتری منتقل شود.
متأسفانه، این رویکرد میتواند منجر به برنامههای ناکارآمد در سیستمعاملهای گوشیهای هوشمند مدرن مانند اندروید شود، جایی که برنامهها هم در پیشزمینه (جایی که تأخیر مهم است) و هم در پسزمینه (جایی که باید عمر باتری در اولویت قرار گیرد) اجرا میشوند.
چگونه برنامهها بر دستگاه وضعیت رادیویی تأثیر میگذارند
هر بار که یک اتصال شبکه جدید ایجاد میکنید، رادیو به حالت پرقدرت منتقل میشود. در مورد دستگاه حالت رادیویی معمولی 3G که قبلاً توضیح داده شد، در طول مدت انتقال شما - به علاوه 5 ثانیه زمان اضافی - با قدرت کامل باقی میماند و به دنبال آن 12 ثانیه در حالت کم انرژی قرار میگیرد. بنابراین برای یک دستگاه 3G معمولی، هر جلسه انتقال داده باعث میشود رادیو حداقل 18 ثانیه انرژی مصرف کند.
در عمل، این بدان معناست که برنامهای که سه بار در دقیقه، انتقال داده یک ثانیهای انجام میدهد، رادیوی بیسیم را دائماً فعال نگه میدارد و درست زمانی که وارد حالت آماده به کار میشود، آن را به حالت پرقدرت برمیگرداند.

شکل ۲. میزان نسبی مصرف توان رادیویی بیسیم برای انتقال یک ثانیهای که سه بار در هر دقیقه اجرا میشود. این شکل، تأخیر «روشن شدن» بین اجراها را در نظر نمیگیرد.
در مقام مقایسه، اگر همین برنامه انتقال دادههای خود را دسته بندی کند و هر دقیقه یک انتقال سه ثانیهای انجام دهد، این کار رادیو را در حالت پرمصرف تنها به مدت 20 ثانیه در هر دقیقه نگه میدارد. این به رادیو اجازه میدهد تا در هر دقیقه 40 ثانیه در حالت آماده به کار باشد که منجر به کاهش قابل توجه مصرف باتری میشود.

شکل ۳. میزان نسبی مصرف برق رادیو بیسیم برای انتقالهای سه ثانیهای که هر دقیقه یک بار انجام میشوند.
تکنیکهای بهینهسازی
حالا که متوجه شدید دسترسی به شبکه چگونه بر عمر باتری تأثیر میگذارد، بیایید در مورد چند نکته صحبت کنیم که میتوانید برای کاهش تخلیه باتری انجام دهید، ضمن اینکه یک تجربه کاربری سریع و روان را نیز فراهم میکنید.
انتقال دادههای بستهای
همانطور که در بخش قبلی گفته شد، دستهبندی انتقال دادهها به گونهای که دادههای بیشتری را در دفعات کمتری منتقل کنید، یکی از بهترین راهها برای بهبود راندمان باتری است.
البته، اگر برنامه شما نیاز به دریافت یا ارسال فوری دادهها در پاسخ به یک اقدام کاربر داشته باشد، انجام این کار همیشه امکانپذیر نیست. میتوانید با پیشبینی و پیشواکشی دادهها ، این مشکل را کاهش دهید. سناریوهای دیگر، مانند ارسال گزارشها یا تجزیه و تحلیلها به سرور و سایر انتقالهای داده غیر فوری که توسط برنامه آغاز میشوند، به خوبی با دستهبندی و بستهبندی سازگار هستند. برای نکاتی در مورد زمانبندی انتقالهای شبکه در پسزمینه، به بخش «بهینهسازی وظایف آغاز شده توسط برنامه» مراجعه کنید.
پیشواکشی دادهها
پیشواکشی دادهها یکی دیگر از روشهای مؤثر برای کاهش تعداد جلسات انتقال داده مستقل است که برنامه شما اجرا میکند. با پیشواکشی، وقتی کاربر عملی را در برنامه شما انجام میدهد، برنامه پیشبینی میکند که کدام دادهها به احتمال زیاد برای سری بعدی اقدامات کاربر مورد نیاز خواهند بود و آن دادهها را در یک لحظه، از طریق یک اتصال واحد، با ظرفیت کامل دریافت میکند.
با بارگذاری اولیهی انتقالها، تعداد فعالسازیهای رادیویی مورد نیاز برای دانلود دادهها را کاهش میدهید. در نتیجه، نه تنها عمر باتری را حفظ میکنید، بلکه تأخیر را بهبود میبخشید، پهنای باند مورد نیاز را کاهش میدهید و زمان دانلود را نیز کاهش میدهید.
پیشواکشی همچنین با به حداقل رساندن تأخیر درون برنامهای ناشی از انتظار برای تکمیل دانلودها قبل از انجام یک عمل یا مشاهده دادهها، تجربه کاربری بهبود یافتهای را فراهم میکند.
در اینجا یک مثال عملی آورده شده است.
یک خواننده خبر
بسیاری از برنامههای خبری سعی میکنند با دانلود عناوین خبری تنها پس از انتخاب یک دستهبندی، دانلود کل مقالات تنها زمانی که کاربر میخواهد آنها را بخواند و دانلود تصاویر کوچک درست زمانی که کاربر در حال اسکرول کردن برای مشاهده است، پهنای باند را کاهش دهند.
با استفاده از این رویکرد، رادیو مجبور میشود در بیشتر جلسات خواندن اخبار کاربران، هنگام اسکرول کردن تیترها، تغییر دستهبندیها و خواندن مقالات، فعال باقی بماند. نه تنها این، بلکه تغییر مداوم بین حالتهای انرژی منجر به تأخیر قابل توجهی هنگام تغییر دستهبندیها یا خواندن مقالات میشود.
یک رویکرد بهتر، پیشواکشی مقدار معقولی از دادهها در هنگام راهاندازی است، که با اولین مجموعه از تیترهای خبری و تصاویر کوچک - با تضمین زمان راهاندازی با تأخیر کم - شروع میشود و با تیترها و تصاویر کوچک باقیمانده و همچنین متن مقاله برای هر مقاله موجود از حداقل فهرست تیترهای اصلی ادامه مییابد.
یک جایگزین دیگر، پیشواکشی (prefetch) هر تیتر، تصویر کوچک، متن مقاله و حتی احتمالاً تصاویر کامل مقاله است - که معمولاً در پسزمینه و طبق یک برنامه از پیش تعیینشده انجام میشود. این رویکرد، خطر مصرف قابل توجه پهنای باند و عمر باتری را برای دانلود محتوایی که هرگز استفاده نمیشود، به همراه دارد، بنابراین باید با احتیاط اجرا شود.
ملاحظات اضافی
اگرچه پیشواکشی دادهها مزایای زیادی دارد، اما استفاده بیش از حد از آن، خطر افزایش مصرف باتری و استفاده از پهنای باند - و همچنین سهمیه دانلود - را با دانلود دادههایی که استفاده نمیشوند، ایجاد میکند. همچنین مهم است که اطمینان حاصل شود پیشواکشی، راهاندازی برنامه را در حالی که برنامه منتظر تکمیل پیشواکشی است، به تأخیر نمیاندازد. در عمل، این ممکن است به معنای پردازش تدریجی دادهها یا شروع انتقالهای متوالی با اولویتبندی باشد، به طوری که دادههای مورد نیاز برای راهاندازی برنامه ابتدا دانلود و پردازش شوند.
اینکه چقدر در پیشواکشی دادهها جدی باشید، به اندازه دادههایی که دانلود میشوند و احتمال استفاده از آنها بستگی دارد. به عنوان یک راهنمای تقریبی، بر اساس ماشین وضعیت که قبلاً توضیح داده شد، برای دادههایی که 50٪ احتمال استفاده در جلسه فعلی کاربر را دارند، معمولاً میتوانید حدود 6 ثانیه (تقریباً 1-2 مگابایت) پیشواکشی کنید تا هزینه بالقوه دانلود دادههای استفاده نشده با صرفهجویی بالقوه ناشی از عدم دانلود آن دادهها، در ابتدا، برابر شود.
به طور کلی، بهتر است دادهها را طوری پیشواکشی کنید که فقط هر ۲ تا ۵ دقیقه و به اندازه ۱ تا ۵ مگابایت نیاز به دانلود مجدد داشته باشید.
با پیروی از این اصل، دانلودهای بزرگ - مانند فایلهای ویدیویی - باید در فواصل منظم (هر ۲ تا ۵ دقیقه) به صورت تکهتکه دانلود شوند، و در واقع فقط دادههای ویدیویی که احتمالاً در چند دقیقه آینده مشاهده میشوند، از قبل بارگذاری شوند.
یک راه حل این است که دانلود کامل را طوری برنامهریزی کنید که فقط هنگام اتصال به وایفای و احتمالاً فقط هنگام شارژ شدن دستگاه انجام شود. API WorkManager دقیقاً از این مورد استفاده پشتیبانی میکند و به شما امکان میدهد کار پسزمینه را تا زمانی که دستگاه معیارهای مشخص شده توسط توسعهدهنده، مانند شارژ شدن و اتصال به وایفای، را برآورده کند، محدود کنید.
قبل از ارسال درخواست، اتصال را بررسی کنید
جستجوی سیگنال تلفن همراه یکی از پرمصرفترین عملیات در دستگاه تلفن همراه است. بهترین روش برای درخواستهای آغاز شده توسط کاربر، بررسی اولیه اتصال با استفاده از ConnectivityManager است، همانطور که در بخش «نظارت بر وضعیت اتصال و اندازهگیری اتصال» نشان داده شده است. اگر شبکهای وجود نداشته باشد، برنامه میتواند با مجبور نکردن رادیوی تلفن همراه به جستجو، در مصرف باتری صرفهجویی کند. سپس میتوان این درخواست را برنامهریزی کرد و پس از برقراری اتصال، آن را به صورت دستهای با سایر درخواستها انجام داد.
اتصالات استخر
یک استراتژی اضافی که علاوه بر دستهبندی و پیشواکشی میتواند مفید باشد، تجمیع اتصالات شبکه برنامه شماست.
معمولاً استفاده مجدد از اتصالات شبکه موجود، کارآمدتر از ایجاد اتصالات جدید است. استفاده مجدد از اتصالات همچنین به شبکه اجازه میدهد تا هوشمندانهتر به ازدحام و مشکلات مربوط به دادههای شبکه واکنش نشان دهد.
HttpURLConnection و اکثر کلاینتهای HTTP، مانند OkHttp ، به طور پیشفرض امکان ادغام اتصال (connection-pooling) و استفاده مجدد از یک اتصال برای چندین درخواست را فراهم میکنند.
جمعبندی و نگاهی به آینده
در این بخش، مطالب زیادی در مورد رادیو بیسیم و برخی استراتژیهایی که میتوانید به طور گسترده برای ارائه یک تجربه کاربری سریع و پاسخگو و در عین حال کاهش تخلیه باتری به کار ببرید، آموختید.
در بخش بعدی، نگاهی دقیق به سه نوع متمایز از تعاملات شبکه که در اکثر برنامهها رایج است، خواهیم داشت. شما با محرکهای هر یک از این انواع و همچنین تکنیکها و APIهای مدرن برای مدیریت کارآمد این تعاملات آشنا خواهید شد.