كيفية التعامل مع خدمات الخلفية في ANDROID O؟

لا شيء يجعل مطور Android أكثر جنونًا من الإصدار الجديد من Android.

كشفت Google للتو عن DP1 للتكرار التالي لنظام Android: Android O. هناك العديد من الميزات الجديدة المثيرة وتحت تحسينات أداء غطاء محرك السيارة في أحدث إصدار من android.

بينما يتحدث الآخرون عما سيكون اسم Android O ، دعونا نحلل هذه النكهة من android من منظور المطور. لمطوري نظام Android ، هناك أربعة تغييرات رائدة:

  • حدود تنفيذ الخلفية
  • تحديثات الموقع الحد
  • إزالة البث الضمني
  • قنوات الإعلام

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

  • الخدمات
  • Wakelocks

دعونا نتحدث عن القيود المطبقة على الخدمات في هذه المقالة.

ما هي الخدمة في الروبوت؟

لنقم أولاً بتجديد الخدمة في Android؟ حسب وثائق android:

الخدمة هي أحد مكونات التطبيق التي يمكنها القيام بعمليات طويلة الأمد في الخلفية ، ولا توفر واجهة مستخدم.

لذلك ، تعد "الخدمة" هي نفس نشاط النشاط ولكنها لا تحتوي على مكون واجهة المستخدم. لذلك ، ليس من الضروري إجراء رسوم متحركة سلسة بمعدل 60 إطارًا في الثانية. لهذا السبب يمكن تشغيله أداء أي مهمة لفترة أطول من الوقت من النشاط.

هناك ثلاثة أنواع من الخدمة:

  • خدمة بدأت - يتم تشغيل خدمة عندما يستدعي مكون تطبيق (مثل نشاط) startService ().
  • خدمة منضمة - خدمة مرتبطة عندما يرتبط أحد مكونات التطبيق بها عن طريق استدعاء bindService ().
  • الخدمة المجدولة - يتم جدولة الخدمة عندما يكون API مثل JobScheduler.

تطبيقات الخلفية مقابل المقدمة:

لمعرفة تغييرات تنفيذ الخلفية ، نحتاج إلى معرفة الفرق بين الخلفية والتطبيق الأمامي أولاً.

قاعدة الإبهام ، سيتم اعتبار طلبك كخدمة مقدمة إذا كانت أي من الحالات الثلاث التالية صحيحة:

  1. يحتوي تطبيقك على نشاط مرئي حاليًا.
  2. يحتوي تطبيقك على خدمة مقدمة قيد التشغيل.
  3. يتم توصيل التطبيق الخاص بك إلى تطبيق أمامي آخر عن طريق ربط الخدمة أو استهلاك موفري المحتوى لديهم.

إذا لم يكن أي من السيناريوهات المذكورة أعلاه صحيحًا في المثيل الحالي ، فسيتم اعتبار طلبك في الخلفية.

لماذا نحتاج إلى تقييد استخدام خدمات الخلفية؟

عندما تعمل تطبيقاتك في الخلفية باستخدام الخدمات ، يستهلك التطبيق الخاص بك اثنين من الموارد الثمينة: ​​1) الذاكرة و 2) البطارية.

هذان هما موردان محدودان على الأجهزة المحمولة ومعظم الأجهزة ذات النطاق المنخفض إلى المتوسط ​​لا تحتوي على ذاكرة أو بطارية داخله.

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

وفقًا للوثائق الخاصة بالخدمة التي بدأت ، فإن أفضل الممارسات هي ،

عند اكتمال العملية ، يجب أن تتوقف الخدمة عن نفسها.

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

منذ الإصدارين الأخيرين من نظام android (بدءاً من Marshmallow) ، تحاول Google جاهدة زيادة عمر البطارية وتقليل استهلاك الذاكرة المستخدمة من قبل التطبيقات من خلال إدخال وضع الغفوة والاستعداد للتطبيق عن طريق تأخير تنفيذ الخلفية بمقدار معين من الوقت إذا كان الهاتف خاملا.

ولكن في معظم الوقت على الرغم من معرفة الجوانب السلبية لمطوري الخدمات طويلة الأجل لا يزالون يستخدمونها. (غالبًا لأنه سهل التنفيذ والصيانة بدلاً من استخدام الحلول الأخرى.)

ما هي القيود المفروضة على الخدمات التي تبدأ من Android O؟

بدءًا من Android O ، إذا كان تطبيقك في الخلفية (تحقق أعلاه من ثلاثة شروط) ، يُسمح للتطبيق بإنشاء وتشغيل خدمات الخلفية لعدة دقائق.

بعد مرور بضع دقائق ، سيدخل طلبك في مرحلة الخمول. عند دخول التطبيق الخاص بك في مرحلة الخمول ، سيقوم النظام بإيقاف جميع خدمات الخلفية تمامًا مثل مكالمات الخدمة الخاصة بك Service.stopSelf ().

وهنا يأتي الجزء الممتع ...

كما ناقشت أعلاه ، سبب استنزاف البطارية واستهلاك الذاكرة بشكل رئيسي من قبل الخدمات التي بدأت. للقضاء على هذا ، يمنع Android O تمامًا استخدام طريقة startService () لبدء الخدمة. إذا اتصلت بـ startService () على Android O ، فسوف ينتهي بك الأمر إلى الحصول على IllegalArgumentException .

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

  • عندما تلقى رسالة FCM ذات الأولوية العالية
  • تلقي broadcas
  • تنفيذ PendingIntent من إشعار.

كيف يمكنك تشغيل مهام الخلفية؟

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

جدولة المهام الخاصة بك باستخدام Job Scheduler API:

  • قدم JobScheduler api في API21 لأداء مهام الخلفية.
  • تتيح لك واجهة برمجة التطبيقات هذه تشغيل خدمة مجدولة وسيقوم نظام Android بدفع جميع الخدمات من تطبيقات مختلفة وتشغيلها معًا في إطار زمني معين. السبب وراء ذلك هو تقليل مقدار الوقت الذي تستيقظ فيه وحدة المعالجة المركزية والراديو في هاتفك عن طريق تجميع المهام معًا. هذا سيستهلك بطارية أقل ويحافظ على صحة النظام.
  • ماذا لو كان تطبيقك يحتوي على minSdkVersion <21؟ في هذه الحالة ، تكون الطريقة الرسمية لجدولة المهمة هي استخدام Firebase Job Dispatcher. يتم دعم Firebase Job Dispatcher طوال الطريق حتى واجهة برمجة التطبيقات 9.

استخدام خدمة المقدمة

إذا كنت تريد تنفيذ بعض المهام المستمرة منذ فترة طويلة في الخلفية ، ففكر في استخدام خدمات المقدمة لذلك. لا ينطبق أي من قيود تنفيذ الخلفية المذكورة أعلاه على خدمات المقدمة.

سيؤدي ذلك أيضًا إلى إطلاع المستخدم على أن التطبيق الخاص بك يقوم ببعض مهام الخلفية من خلال عرض الإشعار المستمر. سيؤدي ذلك إلى زيادة الشفافية مع المستخدم الخاص بك.

قبل Android O ، إذا كنت ترغب في إنشاء خدمة مقدمة ، فعادة ما تبدأ تشغيل خدمة خلفية عن طريق الاتصال بـ startService (). ثم بعد ذلك يمكنك ترقية خدمتك إلى الخدمة الأمامية عن طريق تعيين إشعار مستمر باستخدام طريقة startForeground (). ولكن بدءًا من Android O ، لا يمكنك استخدام startService () بعد الآن. حتى تتمكن من إنشاء خدمة مقدمة ، يجب عليك استخدام NotificationManager.startServiceInForeground (). هذه الطريقة تعادل إنشاء خدمة الخلفية وترقيتها إلى خدمة المقدمة.

استنتاج:

هذه القيود المطبقة على خدمة الخلفية ستوفر بالتأكيد عمر بطارية ممتد وأيضًا انخفاض استخدام ذاكرة الوصول العشوائي. في النهاية ستجعل التطبيقات الخاصة بك سلسة ويسعد المستخدم

يجب عليك إجراء تغييرات في رمز التطبيق الخاص بك الآن؟

لا يزال Android O في DP1. هناك 3 معاينات للمطورين سيتم إصدارها قبل إصدار الإصدار الأخير من Android O. قد يكون هناك بعض التغييرات API في الإصدارات القادمة. لذا ، فقد حان الوقت الآن للتفكير في آثار هذه التغييرات في طلبك والتفكير في الحل البديل لها. بمجرد تحرير معاينة المطور 3-4 ، قم بتطبيق هذه التغييرات على التطبيقات الخاصة بك وجعل تطبيق Android O متوافقًا.

https://paypal.me/kpatel2106؟locale.x=en_GB

~ إذا أعجبك المقال ، فانقر فوق أدناه حتى يتمكن المزيد من الأشخاص من رؤيته! يمكنك أيضًا متابعتي على "متوسط" أو "على مدونتي" ، بحيث يمكنك الحصول على تحديثات بخصوص مقالاتي المستقبلية !! ~