تعرف على الـ Services

Mohammad Laifمنذ 3 سنوات

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

 

 الـ Services هي عبارة عن Context حالها كحال الـ Activity ولكن المختلف فيها انها لاتحتاج الى واجهة مستخدم UI. وبشكل افتراضي فانها تعمل في الخيط الرئيسي (Main/UI Thread) لتشغيل المهام في الخلفية (بعيداً عن عين المستخدم). لذلك يجب عليك استخدام احد انماط التصميم للخيوط الحاسوبية معها كما جاء في الدروس السابقة.


في ماذا تستخدم الخدمات؟
تستطيع استخدام الخدمات الـ Service في اي جزئيه تريدها لاتحتاج الى UI او لتشغيل مهام خلفيه مثلاً لتشغيل موسيقى, او لتحميل ورفع الملفات من والى شبكة الانترنت او اخد نسخ احتياطية لقاعدة البيانات وما الى ذلك.

 

يرجى الانتباه في ان المقصود من: تشغيل المهام في الخلفية او بما هو متعارف عليه باسم Background ليس تشغيل المهام في خيط حاسوبي مختلف, بل القصد هو تشغيل المهام بعيداً عن عين المستخدم (نستطيع القول كالـ BackEnd). لذلك حتى عند تشغيل المهام في الخلفية ستحتاج في احيان كثيرة الى انشاء خيط حاسوبي لها (مختلف عن الخيط الرئيسي) وتشغيلها عليه.

 

انواع الـ Service
من نوع واحد وهو كلاس الـ Service نستطيع تشكيلها الى عدة انواع تناسب احتياجاتنا وهي:

 

Started Service

هذه هي الاساس ومن خلال عمل وراثة لها نكون باقي الانواع. عند التعامل مع هذا النوع نحتاج الى عمل كل شئ يدوياً كـ تشغيلها من خلال المكونات الاربعة للإندرويد (المكونات هي: Activities و Broadcast و Content Provider و Service), انشاء خيط حاسوبي لها منفصل عن الخيط الرئيسي, اطفائها (والا سيحدث تسرب في الذاكرة), كتابة انماط برمجية معينه للحصول على النتيجة منها لإنها لاتستطيع ارجاع اي شئ. اي اننا سنحتاج لكتابة الكثير من الاكواد عند التعامل معها.

 

Intent Service

جاء الـ Android SDK ليختصر علينا الوقت, فهذا النوع يقوم باستخدام النوع الاول من خلال الوراثة ويختصر علينا الكثير جداً. فنحن غير مسؤولين عن اطفائها (لاداعي للخوف من حدوث تسرب في الذاكرة), ولا داعي لإستخدام انماط الخيوط الحاسوبية لإنشاء خيط لها فهي تأتي مع خيط خاص بها.

 

Scheduled Service
ايضاً جاء الـ Android SDK ليختصر علينا الوقت, فهذا النوع يستخدم النوع الاول من خلال الوراثة ويختصر علينا الكثير, يستخدم هذا النوع لتشغيل المهام في الخلفية (بعيداً عن عين المستخدم, وليس في خيط مختلف) بنائاً على شروط محددة نقوم بفرضها كالاحداث ووقت التشغيل. سنتطرق لها في درس الـ Job Scheduled. اي انها مناسبة اذا اردت القيام بمهمة ما كمثلاً اخذ نسخة احتياطية لمستخدم تطبيقك خلال منتصف الليل (نافذة زمنية) بعدما (الشرط) يقوم بوضع هاتفه في الشاحن.

 

Bound Service
هذا النوع يعتبر كـ Started Service او Intent Service فهو ببساطة احدى هذين النوعين ولكن الفرق هنا اننا نستخدم دالة bindService(). اي انك اذا قمت باستخدام هذه الدالة في احد الانواع السابقة ستتحول الى مايسمى بالـ Bound Service. مايميز هذا النوع هو قدرته على التخاطب وارسال المعلومات مع المكون الذي قام بتشغيله (المكونات هي: Activities و Content Provider و Service, وللإسف لاتستطيع تشغيلها من خلال المكون Broadcast). مناسبة لعمل التطبيقات الموسيقة وماشبه ذلك.

 

ماذا استخدم؟

 دائماً ابدء وفضل أستخدام Intent Service على البقية. اما اذا اردت المخاطبه كثيراً بين الـ Service و الـ Activity فقم بتحويلها الى Bound Service. واذا كنت متمرس تستطيع انشاء كلاس من نوع Started Service والتعديل فيها كما تشاء لتناسب احتياجاتك. اما في حالة Scheduled Service فقم باستخدامها في احتياجك لتشغيل مهمه في وقت معين.

 

في الدروس القادمة سنرى كيفية انشاء واستخدام كل نوع على حذى وطريقة التخاطب وارسال المعلومات بينهم.

 

المصادر والمراجع

للمزيد راجع درس المقدمة.
 

نهاية الدرس
لاتنسى تتبع الدرس والدورة كذلك لإشعارك عندما يتم التعديل على المتحوى او اضافة المزيد من المعلومات. ايضاً لاتنسى الاعجاب بالدرس ومشاركته مع الاخرين.

المحاضر

Mohammad Laif

محتوى الدورة

تمهيد
1 مقدمة
2 تعرف على التزامن (الـ Concurrency)
3 اخطاء التزامن (الـ Concurrency) الشائعة
العمليات Processes
1 الهيكلة الهندسية لبيئة نظام الاندرويد
2 طبقة الـ Android Runtime و العمليات Processes
3 انواع العمليات (Processes)
الخيوط الحاسوبية Threads
1 الخيوط الحاسوبية (Threads)
2 مكونات الخيوط الحاسوبية (Thread)
3 انشاء الخيط الحاسوبي
أنماط التصميم للخيوط الحاسوبية
1 انشاء نمط الـ Handler و Looper و Thread
2 انشاء نمط الـ HandlerThreads
3 ماهو نمط الـ Thread Pools (الـ Executors)
4 استخدام نمط الـ Thread Pools كـ Singleton
5 استخدام الـ Callable مع نمط الـ Thread Pools
6 انشاء بركة خيوط حاسوبية Thread Pools لتسريع قاعدة البيانات
7 انشاء نمط الـ AsyncTask
8 انشاء نمط الـ Loader
الـ Broadcasts
1 تعرف على الـ Broadcast Receiver
2 انشاء الـ Broadcast Receiver بشكل ثابت
3 انشاء الـ Broadcast Receiver بشكل ديناميكي
4 استخدام الـ Local Broadcast للتخاطب بين المكونات
الـ Services
1 تعرف على الـ Services الدرس الحالي
2 انشاء الـ Started Service
3 انشاء الـ Intent Service
4 انشاء الـ Bound Service
5 استخدام الـ ResultReceiver للتخاطب مع الـ Intent Service
6 استخدام الـ Broadcast للتخاطب مع الـ Started Service
الـ Alarm Manager
1 تعرف على الـ Alarm Manager
2 طرق استخدام الـ Alarm Manager
الـ Jobs
1 استخدام الـ Android JobSchedualer
2 استخدام الـ Firebase JobDispatcher
3 استخدام الـ WorkManager من حزمة JetPack

الكلمات الدليلية

عن الدرس

1 إعجاب
2 متابع
0 مشاركة
1664 مشاهدات
منذ 3 سنوات

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !