انشاء الـ Intent Service

Mohammad Laifمنذ 5 سنوات

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

 

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

 

نقاط يجب عليك مراعاتها عند العمل مع هذا النوع من الخدمات

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

 

الهدف
انشاء كلاس Service تقوم بأخد معطيان رقمان ثم تقوم بجمعهم وطباعة الناتج في الـ Log.

 

 طريقة انشاء كلاس من نوع الـ IntentService

  • انشاء كلاس جديدة.
  • عمل Extends لكلاس الـ IntentService.
  • اضافتها الى ملف الـ Manifest.xml.
  • ننشئ Constructor يأخد اسم الكلاس, حيث سيكون هو اسم الخيط الحاسوبي الخاص بها.
  • نعمل Override للدوال:
    • onHandleIntent() وهنا سوف نستلم المهام التي نريد تشغيلهم من خلال الـ Intent التي سوف نمررها عند تشغيل هذه الـ Service.
    •   لاداعي لعمل Override للدوال: onBind و onStartCommnad لإن الـ Parent لهذة الكلاس اي الـ IntentService قد عملت هذا ونحن عملنا لها Extends كما بالخطوة الثانية.

 

الخطوات

انشاء كلاس جديدة وجعلها تعمل extends لكلاس الـ IntentService:

public class MyIntentService extends IntentService {}

 

اضافتها الى ملف الـ Manifest.xml:

<service android:name=".service.MyIntentService"/>

 

نعمل Override للدوال:

    public MyIntentService() {
        super("MyIntentService");   // This gonna be our Thread name.
        Log.d(TAG, "MyIntentService: Called.");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.d(TAG, "onHandleIntent: Called.");

        int firstNumber = intent.getIntExtra(Constant.FIRST_NUMBER, -1);
        int secondNumber = intent.getIntExtra(Constant.SECOND_NUMBER, -2);

        int resultNumber = firstNumber + secondNumber;
        Log.d(TAG, "onStartCommand: Result -> " + resultNumber);
    }

لاحظ الداله onHandleIntent حيث نقوم هنا بكتابة الشفرة البرمجيه المراد تشغيلها.

 

طريقة تشغيل وانهاء الـ Started Service
لتشغيلها:

Intent intent = new Intent(Main6Activity.this, MyIntentService.class);
intent.putExtra(Constant.FIRST_NUMBER, 10);
intent.putExtra(Constant.SECOND_NUMBER, 20);
startService(intent);

لاحظ طريقة ارسال لها البيانات المراد معالجتها او استخدامها اثناء تشغيلها من خلال الـ Intent.

 

لإنهائها:

لاداعي للقلق في اطفائها.

 

حل تشغيل مهمه طويله على الستارتت سيرفس

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

 

في هذا الدرس تعرفنا على طريقة انشاء الخدمة Intent Service ورأينا انها نماسبة جداً وتعتبر الخيار الاول لإكثر الاستخدامات. في الدرس القادم سنرى طريقة انشاء واستخدام الـ Bound 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

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

عن الدرس

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

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

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

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