إرسال طلبات العمل إلى الخدمة التي تعمل في الخلفية

لقد أوضحنا الدرس السابق كيفية إنشاء صف واحد (JobIntentService). هذا النمط كيفية تشغيل JobIntentService لتشغيل عملية من خلال إضافة العمل إلى قائمة الانتظار مع Intent. يمكن لـ Intent هذا تحتوي بشكل اختياري على بيانات JobIntentService ستتم المعالجة.

إنشاء طلب عمل وإرساله إلى JobIntentService

لإنشاء طلب عمل وإرساله إلى JobIntentService، إنشاء Intent وإدراجه في قائمة الانتظار يمكن تنفيذها من خلال استدعاء enqueueWork() يمكنك اختياريًا إضافة بيانات إلى الغرض (في شكل عناصر إضافية) من أجل ستتم معالجة JobIntentService. لمزيد من المعلومات حول إنشاء الأهداف، اقرأ مقالة قسم الأهداف في فلاتر الأهداف وفلاتر الأهداف

وتوضح مقتطفات الرمز التالية هذه العملية:

  1. إنشاء Intent جديد تم الاتصال برقم RSSPullService من قِبل JobIntentService.

    Kotlin

    /*
     * Creates a new Intent to start the RSSPullService
     * JobIntentService. Passes a URI in the
     * Intent's "data" field.
     */
    serviceIntent = Intent().apply {
        putExtra("download_url", dataUrl)
    }
    

    Java

    /*
     * Creates a new Intent to start the RSSPullService
     * JobIntentService. Passes a URI in the
     * Intent's "data" field.
     */
    serviceIntent = new Intent();
    serviceIntent.putExtra("download_url", dataUrl));
    
  2. الاتصال بـ enqueueWork()

    Kotlin

    private const val RSS_JOB_ID = 1000
    RSSPullService.enqueueWork(context, RSSPullService::class.java, RSS_JOB_ID, serviceIntent)
    

    Java

    // Starts the JobIntentService
    private static final int RSS_JOB_ID = 1000;
    RSSPullService.enqueueWork(getContext(), RSSPullService.class, RSS_JOB_ID, serviceIntent);
    

ولاحظ أنه يمكنك إرسال طلب العمل من أي مكان في "نشاط" أو "جزء". مثلاً، إذا كنت بحاجة إلى الحصول على إدخالات المستخدم أولاً، يمكنك إرسال الطلب من معاودة الاتصال تستجيب للنقر على زر أو إيماءة مشابهة.

بعد الاتصال بـ enqueueWork(), تؤدي "JobIntentService" المهمة المحدّدة في onHandleWork()، ثم يتوقف نفسه.

تتمثل الخطوة التالية في إبلاغ نتائج طلب العمل مرة أخرى بسجل نشاط أو جزء. يوضح الدرس التالي كيفية القيام بذلك باستخدام BroadcastReceiver