توفّر الفئة IntentService
بنية بسيطة للجري
أي عملية على سلسلة محادثات واحدة في الخلفية. وهذا من شأنه أن يتيح التعامل مع العمليات طويلة المدى.
بدون التأثير في سرعة استجابة واجهة المستخدم. كذلك، إنّ
لا تتأثر ميزة IntentService
بمعظم أحداث مراحل نشاط واجهة المستخدم، ولذلك
يستمرّ في العمل في ظروف قد تؤدي إلى إيقاف AsyncTask
هناك بعض القيود على IntentService
:
-
لا يمكنها التفاعل مباشرةً مع واجهة المستخدم. لعرض نتائجه في واجهة المستخدم،
إرسالها إلى
Activity
. -
يتم تنفيذ طلبات العمل بشكل تسلسلي. إذا كانت العملية قيد التشغيل في
IntentService
وأرسلت طلبًا آخر، يُرجى العِلم بأنّ الطلب في الانتظار حتى تنتهي العملية الأولى. -
لا يمكن مقاطعة عملية يتم تشغيلها على
IntentService
.
ولكن في معظم الحالات، تكون IntentService
هي الطريقة المفضّلة لإجراء
عمليات بسيطة في الخلفية.
يوضّح لك هذا الدليل كيفية تنفيذ الإجراءات التالية:
- أنشئ فئتك الفرعية من
IntentService
. - أنشئ طريقة معاودة الاتصال المطلوبة
onHandleIntent()
. - تحديد
IntentService
في ملف البيان.
التعامل مع الأهداف الواردة
لإنشاء مكوِّن IntentService
لتطبيقك، حدِّد فئة
امتداد IntentService
، وفي داخلها، نحدد طريقة
يلغي onHandleIntent()
. مثلاً:
Kotlin
class RSSPullService : IntentService(RSSPullService::class.simpleName) override fun onHandleIntent(workIntent: Intent) { // Gets data from the incoming Intent val dataString = workIntent.dataString ... // Do work here, based on the contents of dataString ... } }
Java
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
لاحِظ أنّ عمليات الاستدعاء الأخرى لمكوِّن Service
عادي، مثل
يتم استدعاء onStartCommand()
تلقائيًا من خلال
IntentService
في IntentService
، يجب تجنُّب
لتجاوز عمليات الاستدعاء هذه.
لمزيد من المعلومات حول إنشاء IntentService
، يمكنك مراجعة تمديد
فئة IntentService
تحديد خدمة intent في البيان
ويحتاج IntentService
أيضًا إلى إدخال في بيان التطبيق.
تقديم هذا الإدخال على أنه
<service>
هو عنصر تابع
عنصر
<application>
:
<application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... </application>
تحدّد السمة android:name
اسم فئة
IntentService
لاحظ أن
<service>
لا يحتوي العنصر على
فلتر الأهداف. تشير رسالة الأشكال البيانية
يستخدم Activity
الذي يرسل طلبات العمل إلى الخدمة
Intent
بشكل واضح، لذلك لن تكون هناك حاجة إلى أي فلتر. هذا أيضًا
يعني أن المكونات الموجودة في نفس التطبيق أو التطبيقات الأخرى فقط
نفس رقم تعريف المستخدم الوصول إلى الخدمة.
الآن بعد أن انتقلت إلى صف IntentService
الأساسي، يمكنك إرسال طلبات العمل.
إليها مع كائنات Intent
. إجراءات بناء هذه الكائنات
وإرسال هذه الرسائل إلى IntentService
مذكورة في
إرسال طلبات العمل إلى خدمة الخلفية