X

ميزات أندرويد 8.0: وداعًا لكابوس استنزاف البطارية وموارد الهاتف بفضل ميزة Background Executions Limits

قامت جوجل بإضافة العديد من الميزات لنسخة أندرويد 8.0 أوريو الجديدة، وفي حين أننا سنكون قادرين على التّفاعل المُباشر مع الكثير منها (مثل الأيقونات التكيفية أو قنوات الإشعارات) إلا أن بعضها الآخر سيعمل بصمتٍ ليُوّفر أداءً أفضل للهاتف، مثل ميزة فريق الإنقاذ Rescue Party والأهم القيود الجديدة على التطبيقات العاملة بالخلفية عبر ميزة Background Executions Limits.

تمهيد: كابوسٌ اسمه تطبيقات الخلفية

عند الحديث عن كيفية عمل التطبيقات من وجهة نظر نظام التّشغيل، يمكن تصنيفها لنوعين:

  • التطبيقات العاملة بالواجهة Foreground Apps
  • التطبيقات العاملة بالخلفية Background Apps

يمكن اعتبار أي تطبيق يتم التّفاعل معه بشكلٍ مباشر على أنه تطبيقٌ يعمل بالواجهة، ولو كنتم تقرأون هذا المقال من تطبيق أردرويد مثلًا، فهذا يعني أنه بحالةٍ فعالة بواجهة الاستخدام، بينما في حال قمتم بإبقائه مفتوحًا ولكن انتقلتم لقراءة المقال على مُتصفح كروم، فسيُصبح تطبيق أردرويد بالخلفية بينما سيحتل تطبيق كروم الواجهة.

تُعتبر التّطبيقات العاملة بالواجهة شرهة جدًا لاستهلاك البطارية كونها تستخدم قدرات الإظهار في الشاشة، اتصالًا بالإنترنت، وموارد من شريحة المعالجة والذاكرة العشوائية، وكلما ازداد تعقيد التطبيق (مثل تطبيقات الألعاب) كلما ازداد استهلاكه للموارد والبطارية. على الرّغم من ذلك، يُمكن القول أن هذه التطبيقات لا تُعتبر مُشكلة كون المُستخدم يعرف تمامًا أنها فاعلة ويستطيع إغلاقها عند الانتهاء منها، وهذا ما يدعونا للانتقال للمشكلة الحقيقية: التطبيقات العاملة بالخلفية.

بخلاف تطبيقات الواجهة، لن يكون المستخدم قادرًا على “مشاهدة” التطبيقات العاملة بالخلفية والتي تقوم باستهلاك موارد الهاتف وبطاريته بشكلٍ متواصل بدون أي شعورٍ من المستخدم. من الأمثلة على هذا هي التطبيقات التي تعمل في الخلفية لتحديد الموقع الجغرافي للمستخدم بهدف تقديم التوصيات بالمطاعم أو المقاهي وإرسالها بشكل تنبيهات، مثل تطبيق Foursquare على سبيل المثال. وبعض التطبيقات التي تعمل في الخلفية بشكل دوري (كل ساعة مثلا) لتتصل بالمُخدم الخاص بالتطبيق وتقوم بتنزيل المعلومات الجديدة في حال توفرها. كما يُعتبر فيسبوك من التطبيقات التي تحتوي على عدد كبير من الخدمات Services العاملة في الخلفية منها خدمات المزامنة وحذف الكاش وغيرها.

يعتبر فيسبوك من التطبيقات الأكثر استهلاكًا للطاقة بسبب اعتماده على الكثير من الخدمات العاملة في الخلفية

لهذه الأسباب، قامت جوجل بتطوير آلياتٍ جديدة في نسخة أندرويد 8.0 أوريو للحد من هذه المشاكل وتقليص أثر التطبيقات العاملة بالخلفية لأقصى حدٍ ممكن.

أندرويد 8.0 – رقابة أعلى على تطبيقات الخلفية

من أجل الحد من الأثر السلبيّ للتطبيقات العاملة بالخلفية والخدمات المُرتبطة بها، تم إطلاق ميزة قيود العمليات بالخلفية Background Executions Limits التي تنطوي على فكرتين جديدتين:

  • الحد من عدد الخدمات التي تجري بالخلفية Background Services Limitations
  • الحد من رسائل النّظام لتطبيقات الخلفية Broadcast Limitations

بشكلٍ عام، فإن الهدف الأساسيّ من هذه الآليات هو قتل كافة الخدمات Services والأنشطة Activities المرتبطة بالتطبيقات عندما تكون بحالة خاملة Idle، بالإضافة لإلغاء قدرة التطبيقات الخاملة على استقبال رسائل نظام التشغيل المعروفة باسم Broadcast. قد يعتقد البعض أن هذا يعني عدم تمكّن المُستخدم من الحصول على إشعاراتٍ من تطبيقات التواصل الاجتماعيّ إلا في حال قيامه بفتحها، ولكن الأمر ليس كذلك، حيث وفرّت جوجل طريقةً أذكى لتأمين استمرار عمل التطبيقات بدون أن تستهلك مواردًا كبيرة بالخلفية عبر تحديث واجهة التطبيق البرمجية المعروفة باسم JobScheduler والتي سنأتي على ذكرها.

الحد من العمليات في الخلفية Background Services Limits

بدأنا المقال بالحديث عن أنواع التطبيقات حيث يميّز نظام أندرويد بينها على أساس وضعية العمل: تطبيقات الواجهة Foreground وتطبيقات الخلفية Background. من أجل توفير أداءٍ أفضل لنظام التشغيل ككل وتقليل استنزاف موارد الهاتف والبطارية، تم إعادة بناء المعايير الخاصة التي يمكن عبرها اعتبار تطبيقٍ ما على أنه متواجد ضمن الواجهة أو الخلفية، خصوصًا أن وجوده بالخلفية أصبح ينطوي على قيودٍ صارمة.

الآن ووفقًا للمعايير الجديدة الخاصة بأندرويد 8.0 أوريو، سيتم اعتبار تطبيق على أنه عاملٌ في الواجهة في حال تحقق أحد الشروط التالية:

  • وجود نشاطٍ مرئيّ للتطبيق Visible Activity (أي تطبيق يتم فتحه ويظهر على الشاشة بشكلٍ كامل)
  • وجود خدمة Service تعمل بالواجهة خاصة بالتطبيق (مثل التنبيه الذي يظهر بشكل مستمر أعلى الشاشة لدى تشغيل خاصية التنقل Navigation ضمن تطبيق الخرائط)
  • وجود تطبيقٍ آخر عامل بالواجهة بحيث يعتمد على خدمةٍ من تطبيق آخر. الأمثلة هنا متعددة، حيث تنتمي تطبيقات لوحة المفاتيح لهذه الخانة وذلك عبر قيامنا باستخدامها بشكلٍ مُتواصل في تطبيقات الدردشة وشبكات التّواصل والمُتّصفحات على الرّغم من أننا لم نقم بفتحها بشكلٍ مُباشر، أو مشغلات الموسيقى أو حتى تطبيقات لوحات الخلفية Wallpaper Apps.

في حال عدم تحقق أيّ من الشروط السابقة سيتم التعامل مع التطبيق على أنه في “الخلفية Background”، وعند هذه النقطة، سيكون هنالك فترة زمنية قصيرة جدًا يسمح للتطبيق من خلالها بإنشاء واستخدام الخدمات الخاصة بنظام التشغيل وفي حال لم يتم ذلك، سينتقل التطبيق ليصبح “خاملًا Idle”، وهنا سيكون هنالك أيضًا نافذة زمنية قصيرة سيكون بإمكان التطبيق عبرها أن يبدأ بإنشاء خدمةٍ ما، وبعدها سيتم إسبات التطبيق وإيقاف الخدمات والأنشطة المرتبطة به ما يمنعه من استهلاك موارد الهاتف، وذلك حتى يقوم المستخدم بجلبه للواجهة مرةً أخرى. يجب التوضيح إلى أن هذه العملية لن تقتل أنشطة التطبيق كليًا، وهي ليست مكافئة لخيار “Stop App” الذي يمكن تفعيله من إعدادات التطبيق، ولكنها ستحد من قدراته بشكلٍ كبير وتجعله – إلى حدٍ ما – بحالة إسبات.

الحد من رسائل نظام التشغيل Broadcast Limitations

لا يتعلق نشاط تطبيقات الخلفية بالخدمات التي تستطيع إنشائها أو الاتصال بها، حيث يمكن تفعيلها عند تلقي رسالة تنبيه مضمنة من نظام التشغيل تعرف باسم Implicit Broadcast والتي تستخدم لإعلام التطبيقات عند حدوث تغييرٍ ما ضمن الإعدادات العامة. أبرز مثال ذلك هو عند الانتقال من وضع الطيران Flightmode الذي تكون فيه كافة إعدادات الاتصال مغلقة وغير مفعلة للوضع الطبيعيّ، حيث سيقوم النظام بتبليغ كافة التطبيقات المرتبطة بهذه الخدمات بأن هنالك تغييرًا قد حصل وهو إعادة تفعيل وحدات الاتصال اللاسلكيّ في الهاتف حيث كان ذلك يتم سابقًا عبر رسالةٍ مضمنة تدعى CONNECTIVITY_CHANGE، وهو الأمر الذي سيجعل التطبيقات تنشئ خدمات جديدة للبحث عن التنبيهات وعرضها للمستخدم، وهو المشهد الذي يعرفه الكثيرون والمُتمثّل بورود عددٍ كبير جدًا من الإشعارات بعد تشغيل وضعية الاتصال.

يستطيع المطورون أن يقوموا بتزويد تطبيقاتهم بالقدرة على استقبال الرسائل المضمنة كي تقوم التطبيقات بتنفيذ مهماتٍ مختلفة بعد وصول هذه الرسائل، وفي حال كان التطبيق قادرًا على “الاستماع” لرسائل نظام التشغيل والاستجابة عبر تنفيذ مهمةٍ ما، فإن هذا سيؤدي لاستنزافٍ إضافيّ لموارد الهاتف وجعل التطبيقات بحالة عمل حتى لو لم يتم فتحها مباشرةً، فضلًا عن ذلك، قد يتم تزويد التطبيقات بالقدرة على استقبال الرسائل المضمنة حتى لو لم تكن تحتاجها فعليًا، ما سيؤدي لعبءٍ إضافيّ على الهاتف ككل ووجود عدد كبير من الخدمات بالخلفية التي ستستهلك الذاكرة العشوائية، ما سيؤدي إلى حمل زائد على المعالج لضرورة تنظيم كافة هذه الخدمات، والنتيجة النهائية هي بطء بالأداء. الفيديو التالي من القناة الرسمية لمطوري أندرويد يشرح هذه المشاكل والحلول المتبعة سابقًا بنسخة أندرويد 7.0 نوجا:

بالنسبة لنسخة أندرويد 8.0 أوريو الجديدة، فإن ما قامت به جوجل هو إلغاء قدرة التطبيقات على استقبال الرسائل المضمنة إلا في حال كانت تعمل بالواجهة، ما يعني أنه وفي حال كان التطبيق بالخلفية (وفقًا للمعايير الجديدة)، فإنه لن يتمكن من تنفيذ أي مهمة كونه لن يستقبل الرسالة التي ستبلغه بحدوث تغييرٍ ما ضمن إعدادات نظام التشغيل والهاتف. لم يشمل هذا التغيير كل التطبيقات، حيث تم وضع لائحة استثناءات Implicit Broadcast Exceptions، مثل تغيير التوقيت الزمنيّ الذي سيعني تنبيه نظام التشغيل لتطبيقات الوقت والمقوّمة بضرورة التغيير التلقائيّ.

بكل الأحوال هنا سيعود السؤال مرة أخرى: لنفرض أني قمت بتغيير وضعية الهاتف من نمط الطيران إلى نمط التشغيل العاديّ. الآن ومع هذه الميزة لن أحصل على تنبيهاتٍ من تطبيقات المحادثة أو البريد الإلكترونيّ (أو غيرها) حول الرسائل التي وردتني عندما كان الاتصال مغلقًا، فهل هذا يعني أنه سيتوجب عليي كمستخدم أن أفتح كل تطبيقٍ على حدى لمشاهدة التنبيهات الخاصة به؟

الجواب هو بالطبع لا، وهنا يأتي الدور على الميزة التي من شأنها إيجادٍ حلٍ ذكيّ لهذا الأمر.

جدولة المهام JobScheduler

يوفر نظام أندرويد عدة آليات برمجية لتمكين التطبيقات من العمل بشكلٍ جيد، وبحالة تطبيقات الخلفية، فهنالك آليتين: الاعتماد على آلية الخدمات Services أو المهمات Jobs. كما وضحنا سابقًا، تستهلك الخدمات جزءًا كبيرًا من موارد الهاتف، بينما تتيح “المهمات” طرقًا أفضل لضمان عمل التطبيق بالطريقة المطلوبة بأقل استهلاكٍ ممكن للطاقة والموارد.

بالنسبة لخاصية جدولة المهام JobScheduler، فهي عبارة عن واجهة تطبيق برمجية API تم إطلاقها لأول مرة ضمن نسخة أندرويد 5.0 لوليبوب وتم الآن تحسينها وإضافة خواص جديدة إليها ضمن نسخة أندرويد 8.0 أوريو ضمن حزمة واجهات التطبيقات البرمجية API Level 26.0 بما يمكنها من أداء العمل المطلوب واستبدال الخدمات والأنشطة العاملة بالخلفية.

سيتم ذلك على الشكل التالي: لنفترض أن أحد تطبيقات التواصل الاجتماعيّ يريد تفقد وجود تنبيهات وإبلاغ المستخدم بذلك. بدلًا من الاعتماد على خدمةٍ تعمل بشكلٍ متواصل في الخلفية، سيكون بالإمكان جدولة مهمة تتفعل تلقائيًا بشكلٍ دوريّ وتقوم بإرسال استعلام Query للسحابة لتفقد وجود تنبيهاتٍ جديدة والتي بحال وجودها ستقوم بتفعيل خدمة إبلاغ المستخدم، وبخلاف ذلك، سيتم إلغاء المهمة ويبقى التطبيق خاملًا بالخلفية.

أحد طرق تنفيذ هذه الآلية هو عبر استبدال خدمة IntentService العاملة بالخلفية بشكلٍ متواصل لتفقد الطلبات غير المتزامنة بمهمةٍ جديدة تم تسميتها JonIntentService والتي تؤدي نفس المهمة ولكن عبر الاعتماد على آلية المهمات بدلًا من الخدمات، أي تفقد دوريّ بدلًا من العمل المستمر والمتواصل. بالإضافة إلى ذلك، ولضمان أفضل استثمار لموارد الهاتف، تم إطلاق قيود برمجية جديدة مثل ()isRequireStorageNotLow التي ستؤدي لعدم تفعيل أي مهمة على الإطلاق في حال عدم توافر مساحة كافية في الذواكر، أو خاصية ()isRequireBatteryNowLow التي تتفقد حالة البطارية وتؤدي لعدم تفعيل المهمة إذا كانت الطاقة منخفضة.

خلاصة 

بعد هذا العرض يمكن أن نلخص الفكرة من ميزة قيود العمليات بالخلفية Background Executions Limits كما يلي:

  • يتضمن نظام أندرويد 8.0 أوريو آلياتٍ جديدة للحد من الخدمات والأنشطة التي تقوم بها التطبيقات بالخلفية بهدف تحسين تجربة الاستخدام وتقليل استنزاف موارد الهاتف
  • من أجل ضمان عدم تأثر تجربة الاستخدام ككل بهذه القيود، تم تحسين واجهة JobScheduler لتمثل بديلًا ذكيًا وأكثر كفاءة من الخدمات العاملة بالخلفية

الآن وفي حال امتلاككم لهاتفٍ يعتمد على نسخة أندرويد 8.0 الجديدة، فإنه يتوجب عليكم أن تعرفوا أن الحالة الافتراضية لميزة قيود العمليات بالخلفية ستؤدي لتنفيذها على التطبيقات المتوافقة مع الواجهات البرمجية API Level 26.0، ولكن يمكن أن يقوم المستخدمون بتعديل إعدادات الهاتف لتفعيل هذه الميزة بحيث تُنفذ على كافة التطبيقات وبدون استثناء.


هذا الكلام يعني أن جوجل تُشجع المطورين بشكلٍ غير مباشر على ترقية تطبيقاتهم لتصبح متوافقة مع المعايير الجديدة وعلى الاعتماد أكثر على خاصية جدولة المهام بدلًا من الخدمات والأنشطة العاملة بالخلفية، ويمكن الاطلاع على الدليل الرسميّ الخاص بتحديث التطبيقات وجعلها متوافقة مع معايير وميزات أندرويد 8.0 أوريو: اضغط هنا.

بالنسبة للمستخدمين، فإن توّفر مثل هكذا خيار هو أمرٌ ممتاز بكل تأكيد خصوصًا أنه سيوفر على الكثيرين ضرورة الحصول على صلاحيات المستخدم الجذر من أجل إلغاء تثبيت الكثير من التطبيقات والخدمات المُحملة مسبقًا على الهاتف، واعتمادًا على الشرح الذي تم توفيره لآلية عمل القيود الجديدة، فإنه من المفترض الحصول على تحسن كبير بأداء الهاتف ونظام التشغيل ككل، سواء من ناحية قدرة البطارية على العمل أو سلاسة وسرعة الاستخدام.

المصدر1، المصدر2، المصدر3، المصدر4

 

المصدر: ميزات أندرويد 8.0: وداعًا لكابوس استنزاف البطارية وموارد الهاتف بفضل ميزة Background Executions Limits

Leave a Comment