انشاء الـ Intent Service
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
جاء الـ 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.
رابط الكلاسات المستخدمه في هذا الدرس
- تم استخدام MyIntentService.java في Main6Activity.java.
للحصول على رابط المشروع راجع درس المقدمة.
المصادر والمراجع
- IntentService | Android Developers.
- Create a background service | Android Developers.
- Service | Android Developers.
- راجع الدرس: تعرف على الـ Services.
للمزيد راجع درس المقدمة.
نهاية الدرس
لاتنسى تتبع الدرس والدورة كذلك لإشعارك عندما يتم التعديل على المتحوى او اضافة المزيد من المعلومات. ايضاً لاتنسى الاعجاب بالدرس ومشاركته مع الاخرين.
محتوى الدورة
الكلمات الدليلية
عن الدرس
2 إعجاب |
1 متابع |
0 مشاركة |
2866 مشاهدات |
منذ 5 سنوات |
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !