0Pricing
Android Academy · درس

إنشاء Worker

حدّد العمل في الخلفية داخل Worker

إنشاء Worker درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.

إنشاء Worker

وحدة العمل في الخلفية في WorkManager هي Worker. تحدد المهمة من خلال توريث فئة أساسية للعامل وتجاوز أسلوب العمل فيها.

CoroutineWorker

بالنسبة إلى Kotlin، وسّع CoroutineWorker. إن doWork() هي دالة suspend، لذا يمكنك استدعاء دوال suspend أخرى والعمل على موزّع في الخلفية بصورة طبيعية.

class UploadWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {
    override suspend fun doWork(): Result {
        // background work here
        return Result.success()
    }
}

المنشئ

يتلقى كل عامل Context وWorkerParameters في منشئه ويمررهما إلى الفئة الفائقة. ينشئ WorkManager العامل بالنيابة عنك؛ ولا تستدعي المنشئ مباشرةً مطلقًا.

يعيد doWork قيمة Result

يجب أن يعيد doWork() قيمة Result تصف النتيجة. هناك ثلاثة احتمالات.

  • Result.success()
  • Result.retry()
  • Result.failure()

Result.success

أعِد Result.success() عند اكتمال العمل. تتم إزالة العمل من قائمة الانتظار. ويمكنك إرفاق بيانات ناتجة لتمريرها إلى العمل المتسلسل.

override suspend fun doWork(): Result {
    uploadLogs()
    return Result.success()
}

Result.retry

أعِد Result.retry() عند حدوث فشل مؤقت، مثل خطأ مؤقت في الشبكة. يعيد WorkManager تشغيل العامل لاحقًا وفقًا لسياسة التراجع الخاصة به.

override suspend fun doWork(): Result {
    return try {
        syncData()
        Result.success()
    } catch (e: IOException) {
        Result.retry()
    }
}

Result.failure

أعِد Result.failure() عند حدوث فشل دائم لن يصلحه تكرار المحاولة، مثل إدخال غير صالح. يتوقف العمل ولن يُشغَّل العمل المتسلسل التابع.

قراءة بيانات الإدخال

تمرر المدخلات الصغيرة عبر Data عند وضع العمل في قائمة الانتظار، وتقرأها باستخدام inputData داخل العامل. احرص على أن تكون صغيرة؛ فهي مخصصة للبيانات الكبيرة.

override suspend fun doWork(): Result {
    val userId = inputData.getString("user_id") ?: return Result.failure()
    sync(userId)
    return Result.success()
}

إرجاع بيانات الإخراج

يمكن للعوامل إرجاع Data ضمن النتيجة، ويتلقاها العمال المتسلسلون كمدخلات لهم. هذه هي الطريقة التي تمرر بها النتائج بين الخطوات.

val output = workDataOf("count" to 42)
return Result.success(output)

تشغيل العمل على الموزّع المناسب

يشغّل CoroutineWorker الدالة doWork() على Dispatchers.Default افتراضيًا. وبالنسبة إلى عمليات الإدخال والإخراج الحاجزة، بدّل السياق باستخدام withContext(Dispatchers.IO) لتجنب استنزاف التجمع الافتراضي.

override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
    readAndUploadFile()
    Result.success()
}

اجعل العمال مستقلين

قد يُشغَّل العامل بعد وقت طويل من جدولتِه، ضمن عملية جديدة. لا تعتمد على حالة التطبيق الموجودة في الذاكرة؛ بل مرر ما تحتاج إليه عبر بيانات الإدخال أو اقرأه من وحدة تخزين دائمة.

اختبار سريع

اختبر مدى فهمك لإنشاء Worker.

مراجعة

لقد أنشأت Worker:

  • وسّع CoroutineWorker وتجاوز doWork() من نوع suspend
  • أعِد Result.success() أو Result.retry() أو Result.failure()
  • اقرأ inputData وأعِد Data للإخراج
  • استخدم Dispatchers.IO للعمل الحاجز؛ واجعل العمال مستقلين

التالي: القيود والجدولة.

الأسئلة الشائعة

هل درس «إنشاء Worker» مجاني؟

نعم — نص درس «إنشاء Worker» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء Worker»؟

حدّد العمل في الخلفية داخل Worker تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟

لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «إنشاء Worker»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟

نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. متى نستخدم WorkManager؟
  2. إنشاء Worker
  3. القيود والجدولة
  4. العمل الدوري والمتسلسل
← العودة إلى Android Academy