شاید تا حالا اتفاق افتاده باشد که شاهد افرادی باشید که در حال دایم سوایپ کردن تمامی کاردها در App Switcher برای بستن اجباری اپلیکیشنهایی هستند که همین چند لحظه قبل اجرا کردهاند. ممکن است دلیل آن را بدانید ولی اگر از یکی از آنها بپرسید حتما با جواب “من این کار را برای صرفه جویی در مصرف باتری انجام میدهم” مواجه میشوید. چیزی که آنها نمیدانند این است که چنین کاری دقیقا تاثیر متضادی برای عمر باتری آیفون دارد.
اینکه بخواهیم به آنها بگوییم در حال انجام کار اشتباهی هستند و چرا بستن اپلیکیشنها به اجبار باعث کاهش سریع تر میزان باتری دستگاهشان میشود بی فایده است. اگر باور ندارید میتوانید امتحان کنید. هیچکس جز اطرافیان قابل اعتماد شما شاید نتوانند این عادت بد را درک کنند و به این امر باور داشته باشد که خود سیستم عامل بهتر از هر فرد دیگری اپلیکیشنها را به نحوی مدیریت میکند که در مصرف باتری صرفه جویی شود.
اگر شما جزو آن دسته از افرادی هستید که برای حفظ میزان مصرف باتری اپلیکیشنها را به حالت اجباری میبندید، این کار را متوقف و با خواندن این پست با ما همراه باشید.
سخن طولانی را کوتاه کردن
برای آن دسته از افرادی که زیاد به بحثهای تخصصی علاقه ندارند، کلیت ماجرا این است:
• تا زمانی که یک اپلیکیشن چنین رفتاری را نشان ندهد، نباید هرگز آن را به اجبار ببندید
• برخلاف آنچه که اکثر مردم باور دارند، بستن اجباری یک اپلیکیشن در واقع باعث هدر رفتن باتری میشود
• اپل در اختیار توسعه دهندگان ابزاری را قرار داده است تا اپلیکیشنهای آنها در پس زمینه عملکرد موثری داشته باشند
• کاربران باید به این ایمان داشته باشند که خود سیستم به صورت موثر اپلیکیشنهایی که فعال نیست را مدیریت میکند
حالا اگر میخواهید بیشتر در رابطه با علت عدم این کار اطلاعات داشته باشد جزییات بیشتر را در زیر بخوانید.
اصطلاح شناسی: بستن در برابر بستن اجباری
بستن یک اپلیکیشن با فشار دادن دکمهیHome صورت میگیرد.
برای بستن اجباری یک اپلیکیشن نیاز به این است که کاربر دوبار روی دکمهی Home فشار دهد، سپس روی یک کارت اپلیکیشن به سمت بالا در App Switcher سوایپ کند.
افسانهای که وجود دارد
افسانهای که وجود دارد این است که بستن اجباری اپلیکیشنها با حذف آنها از App Switcher باعث صرفه جویی در میزان مصرف باتری میشود چون این اپلیکیشنها دیگر در پیش زمینه فعال نیستند. این چیزی است که مردم باور دارند، و در بسیاری از موارد، چیزی است که توسط دوستان، خانواده یا حتی بدتر کارکنان اپل به آنها گفته شده است.
حقیقتی که وجود دارد
حقیقت این است که زمانی که شما یک اپلیکیشن را با فشار دادن دکمهی Home میبندید، جلوی استفادهی آن اپلیکیشن از پردازنده گرفته و استفاده اپلیکیشن از حافظه به حالت تعلیق در میآید. در آن زمان، اپلیکیشن در پس زمینه فعال نیست.
استثنائاتی نیز وجود دارد، که ما در مورد آنها متوجه خواهیم شد، ولی به عنوان یک قاعدهی کلی، فشار دادن دکمهی Home باعث متوقف سازی اپلیکیشن شده و آن را در وضعیت تعلیق قرار میدهد که عملا از هیچ باتری استفاده نمیکند. با نگه داشتن یک اپلیکیشن در حافظه، سیستم مطمئن میشود که شما میتوانید با اجرای دوبارهی آن برنامه کاری که متوقف ساختهاید را ادامه دهید.
زمانی که شما یک اپلیکیشن را به حالت اجباری میبندید، باعث خالی سازی حافظهی استفاده شده توسط این اپلیکیشن میشود که البته دارای تاثیر منفی، ولی هرچند کوچک، بر روی باتری شما است. بار دیگری که شما این اپلیکیشن را باز میکنید، سیستم عامل پردازشها را برای بارگذاری مجدد آن در حافظه اجرا خواهد کرد، ولی این بار باتری بیشتری استفاده میشود. با بستن اجباری یک اپلیکیشن و اجرای مجدد آن کمی بعد تر، شما در واقع باتری خود را دوبار خالی کردهاید، آن هم بی دلیل، از آنجاییکه از اول هیچگونه نیرویی مصرف نمیکرده است.
زمانی که شما دکمهی Home را فشار میدهید، وضعیت استفادهی اپلیکیشن از پردازنده به حالت تعلیق در میآید، حتی با آنکه هنوز در مموری قرار دارد، و این امر عملا هیچگونه تاثیری روی باتری ندارد.
مجددا، استثنائاتی در این رابطه وجود دارد و ما آنها را بعدا بحث خواهیم کرد.
اینطور تصور کنید
در قسمت آخر پادکست اجازه دهید در رابطه با جیل بریک صحبت کنیم، من از قیاسی صحبت کردم که چندین نفر از شنوندگان به من گفتند که حرفی منطقی بوده است، بنابراین تصمیم گرفتم که به طور کامل اینجا توضیحش دهم
فرض کنیم در حال تماشای تلویزیون هستید و تشنه هستید. به آشپزخانه میروید و یک لیوان برداشته و آن را از آب پر کرده و نیمی از آن را مینوشید. شما نیمهی دیگر لیوان را در ظرفشویی ریخته و به جلوی تلویزیون بر میگردید.
5 دقیقه بعد، شما دوباره تشنه هستید، به آشپزخانه بر میگردید و کار بالا را تکرار میکنید.
منطقی نیست، نه؟ چرا باید آبی که به احتمال زیاد دوباره تشنه میشوید و میخواهید بنوشید دور میریزید؟ چرا لیوان نیمه خالی را روی پیشخوان نمیگذارید تا اگر نیاز بود آن را بنوشید به جای اینکه دوباره پر کنید؟
شما در حال هدر دادن منابع هستید، و دقیقا همین کار را با با بستن اجباری یک اپلیکیشن انجام میدهید. شما با خارج سازی آن اپلیکیشن از مموری، و بارگذاری مجدد به دنبال اجرای دوبارهی آن، باتری را هدر میدهید.
نحوهی مدیریت اوضاع توسط iOS زمانی که یک اپلیکیشن را میبندید
اپلیکیشنها در iOS در 5 وضعیت اجرای متفاوت میتوانند باشند:
• در حالت غیر اجرا: اپلیکیشن باز نشده یا بسته شده است. در مموری وجود ندارد. از باتری استفاده نمیکند.
• غیر فعال: اپلیکیشن در پیش زمینه است ولی استفاده نمیشود، نظیر زمانی که شما دستگاه خود را در حالی که یک اپلیکیشن بر روی صفحهی نمایش است، قفل میکنید. در مموری قرار دارد، ولی باتری یا CPU استفاده نمیشود.
• فعال: اپلیکیشن در حال استفاده شدن است. از CPU استفاده میکند و در مموری قرار دارد. از باتری استفاده میشود.
• پس زمینه: اپلیکیشن هنوز در حالت پردازش قرار دارد، ولی دیگر در صفحهی نمایش نیست. از CPU استفاده میکند و در مموری قرار دارد. از باتری استفاده میشود.
• معلق: اپلیکیشن در وضعیت اجرا یا روی صفحهی نمایش قرار ندارد. از CPU اسفاده نمیکند ولی در مموری قرار دارد. از باتری استفاده نمیشود.
از فعال تا پس زمینه، تا معلق
اگر در حال حاضر در حال استفاده از یک اپلیکیشن هستید، فعال در نظر گرفته میشود. از CPU و مموری استفاده میکند. به محض اینکه دکمهی Home را فشار دهید، اپلیکیشن به پس زمینه منتقل میشود جاییکه به مدت اندکی (چند ثانیه) قبل از تعلیق باقی خواهد ماند. در عرض چند ثانیه بعد از اینکه شما دکمهی Home را فشار دادید، اپلیکیشن تعلیق یافته دیگر از CPU استفاده نمیکند چون هنوز در مموری قرار دارد، بنابراین میتواند زمانی که دفعهی بعد آن را باز کنید سریع تر اجرا شود.
از معلق تا در حالت غیر اجرا
اگر یک بازی که نیاز به میزان مموری بالایی به عنوان مثال اجرا کنید، و دستگاه شما نیاز به مموری داشته باشد، دستگاه شما ممکن است اپلیکیشنهای تعلیق یافته را خالی کند تا فضای بیشتری برای اپلیکیشنهای پیش زمینه فراهم شود. خالی کردن اپلیکیشنهای تعلیق یافته آنها در وضعیت “عدم اجرا” قرار میدهد و سپس به طور کامل از مموری حذف خواهند شد. به زبان ساده بخواهیم بگوییم، چنین کاری برابر با بستن اجباری خودکار یک اپلیکیشن از طرف شما برای خالی سازی مموری برای دیگر اپلیکیشنها است.
شما میتوانید اطلاعات بیشتری با خواندن وضعیتهای اجرا برای اپلیکیشنها در راهنمای برنامه نویسی اپلیکیشنهای اپل برای iOS به دست آورید.
استثنائات
حالا وقت آن است در مورد استثنائاتی در رابطه با قانونی که به آن اشاره شد صحبت کنیم. اپل در کتابخانهی توسعه دهندگان خود در رابطه با این نوع اپلیکیشنها جزییات بیشتری در اختیار شما میگذارد که ما به صورت جمع بندی آن را اینجا بیان میکنیم.
اپلیکیشنهایی که نیاز به پایان دادن اجرای یک وظیفهی کوتاه مدت دارند: اپلیکیشنهایی هستند که در پیش زمینه پردازشی را شروع کردهاند ولی زمانی که اپلیکیشن بسته میشود یک نوع بازهی زمانی برای پایان دادن پردازش خود در اختیار سیستم میگذارند. به عنوان مثال، اگر شما در حال استفاده از یک کلاینت ایمیل شخص ثالث برای ارسال یک فایل بسیار بزرگ هستید، ممکن است روی گزینهی “ارسال” آهسته ضربه زده و اپلیکیشن را ببندید. این اپلیکیشن میتواند درخواست یک اکستنشن در پس زمینه در حین تکمیل وظیفهی خود کند. زمانی که آن وظیفه کامل شد، اپلیکیشن به حالت تعلیق در میآید.
اپلیکیشنهایی که نیاز به دانلود محتوا در پس زمینه دارند: این نوع اپلیکیشنها در پیش زمینه شروع به دانلود میکنند ولی نیاز به زمان برای تکمیل آن وظیفه زمانی که به پس زمینه انتقال داده میشوند، دارند. طبق گفتهی اپل، این اپلیکیشنها میتوانند این دانلودها را در اختیار سیستم قرار دهند و با این کار اجازه به تعلیق یا بستن اپلیکیشن در حین ادامه یافتن دانلود، داده شود. یک نمونهی خود زمانی که خواهد بود که یک اپلیکیشن پادکست در حال دانلود قسمت جدیدی است. شما میتوانید دانلود را آغاز، اپلیکیشن را ببندید، ولی دانلود در پس زمینه ادامه خواهد یافت.
اپلیکیشنهایی که نیاز به اجرای وظایف در بازهی زمانی طولانی دارند: این نوع اپلیکیشنها باید اجازه یابند که در پس زمینه برای انجام یکسری خاص از وظایف اجرا شوند، نظیر اجرای محتوای قابل پخش (یک اپلیکیشن موزیک) ضبط صدا، گشتن فعال یک مکان (یک اپلیکیشن مسیریابی)، پشتیبانی از صدا بر روی بستر اینترنت (نظیر اسکایپ)، پردازش منظم محتوای جدید (اپلیکیشنهای مربوط به طراحی مجله)، و دریافت منظم به روز رسانیها از لوازم جانبی خارجی (یک اپلیکیشن که در ارتباط با یک مانیتور فیزیکی ارتباط قلب است).
مجدد، کاربر باید در رابطه با مدیریت صحیح این اپلیکیشنها به سیستم اعتماد داشته باشد.
شما میتوانید اطلاعات بیشتری با خواندن اجرا در پس زمینه در راهنمای برنامه نویسی اپلیکیشن اپل برای iOS به دست آورید.
در رابطه با رفرش اپلیکیشن در پس زمینه
با تمامی این حرفها، بعضی از شما ممکن است در این فکر باشید که چه بر سر اپلیکیشنهایی که برای آنها رفرش اپلیکیشن در پس زمینه فعال شده است، میافتد.
من زیاد از نظر فنی در رابطه با این ویژگی نمیتوانم صحبت کنم، به جز اشاره به این سند پشتیبانی:
بعد از اینکه شما به یک اپلیکیشن دیگر سوییچ کردید، بعضی از اپلیکیشنها قبل از اینکه به حالت تعلیق در آورند به مدت اندکی در حالت اجرا هستند. اپلیکیشنهایی که در وضعیت تعلیق قرار دارند از نظر استفاده شدن، یا استفاده از منابع سیستمی در وضعیت فعال قرار ندارند. با فعال سازی Background App Refresh، اپلیکیشنهای معلق شده میتوانند دریافت به روز رسانیها یا محتوای جدید را چک کنند.
آنطور که مشخص شده است، یک نسخهی قدیمی تر از همین سند جزییات بیشتری در رابطه با نحوهی کارکرد Background App Refresh در اختیار میگذارد:
بعضی از اپلیکیشنها میتوانند در پس زمینه در حالت اجرا بودن را ادامه دهند. شما میتوانید به این اپلیکیشنها با فعال سازی Background App Refresh اجازه دهید خودشان را رفرش کنند. این تنظیمات به اپلیکیشنها اجازه میدهد وجود به روز رسانیها یا محتوای جدید را بررسی کنند.
برای صرفه جویی در مصرف باتری، اپلیکیشنهای در حال اجرا در پس زمینه در فواصل زمانی خاصی رفرش میشوند، نظیر زمانی که دستگاه شما به یک شبکهی وای فایل متصل یا به منبع برق زده یا به طور فعال استفاده میشود. iOS در رابطه با الگوهای مختلف براساس نحوهی استفاده شده از دستگاهتان اطلاعات کسب کرده و سعی میکند زمانی که یک اپلیکیشن در پس زمینه اجرا میشود و باید رفرش شود را پیش بینی کند. همچنین زمانی که دستگاه به طور معمول غیر فعال است، نظیر در شب، را متوجه میشود تا جلوی اپلیکیشنها زمانی که شما از دستگاه خود استفاده نمیکنید برای رفرش کردن گرفته شود. اپلیکیشنها همچنین میتوانند براساس موقعیت شما رفرش سازی برنامه ریزی شده در پس زمینه داشته باشند.
طبق نسخهی اولیه از این سند پشتیبانی، و همچنین براساس عقل سلیم، ضرری ندارد که اینطور فرض کنیم که iOS در رابطه با نحوهی رفرش سازی اپلیکیشنها در پس زمینه باهوش است، و بدون فکر تمام روز اپلیکیشنها را به روز رسانی نخواهد کرد. به عنوان مثال به طور دایم فید فیسبوک شما را در سراسر روز در پس زمینه رفرش نخواهد کرد.
اگر شما نگران عمر باتری هستید، شاید بهتر است به بخش Settings > General > Background App Refresh بروید و اپلیکیشنهایی که نیاز به استفاده ندارید یا دوست دارید در پس زمینه به روز رسانی شوند را انتخاب کنید. شخصا، Background App Refresh را برای 80% اپلیکیشنهایم غیر فعال کردهام.
خوب، چه زمانی باید اپلیکیشنها را به اجبار ببندیم؟
به صورت تئوری، هرگز نباید این کار را انجام دهید. در عمل، قضیه فرق میکند چون زمانهایی وجود دارد که شما نظیر زمانی که به درستی عمل نمیکند، یا هنگ کرده است، آن اپلیکیشن را باید به اجبار ببندید. در این مورد، البته انجام چنین کاری پیشنهاد میشود. در رابطه با سایر چیزها، شما باید اجازه به iOS دهید که کار خود را انجام دهد و اوضاع را مدیریت کند. کار شما تنها لذت بردن از دستگاه است.
حالا به دوستان و خانوادهی خود لطفی بکنید و بار دیگر که شخصی را در حال انجام بستن اجباری اپلیکیشنها دید، یا برای آنها لینک این پست را ارسال کنید یا به آنها توضیح دهید که چرا انجام این کار واقعا فکر خوبی نیست.