تعرف على الـ Services
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
الـ 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 فقم باستخدامها في احتياجك لتشغيل مهمه في وقت معين.
في الدروس القادمة سنرى كيفية انشاء واستخدام كل نوع على حذى وطريقة التخاطب وارسال المعلومات بينهم.
المصادر والمراجع
- Services overview | Android Developers.
- Service | Android Developers.
- <service> | Android Developers.
- Test your service | Android Developers.
- Background Execution Limits | Android Developers.
- Background Location Limits | Android Developers.
- Application Fundamentals | Android Developers.
للمزيد راجع درس المقدمة.
نهاية الدرس
لاتنسى تتبع الدرس والدورة كذلك لإشعارك عندما يتم التعديل على المتحوى او اضافة المزيد من المعلومات. ايضاً لاتنسى الاعجاب بالدرس ومشاركته مع الاخرين.
محتوى الدورة
الكلمات الدليلية
عن الدرس
1 إعجاب |
2 متابع |
0 مشاركة |
2544 مشاهدات |
منذ 5 سنوات |
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !