مفاهيم "أداة التحميل المُسبَق"

يساعدك مدير التحميل المسبق في منح المستخدمين تجربة أفضل من خلال عرض المحتوى عليهم بشكل أسرع، مع تقليل وقت الانتظار عند التبديل من عنصر إلى آخر. ويتيح لك أيضًا تخصيص مدة التحميل المسبق وترتيبه لكل عنصر.

في العادة، تعرض التطبيقات على وسائل التواصل الاجتماعي للمستخدم قائمة أو منصّة عرض بعناصر متغيّرة تتضمّن خيارات وسائط. على سبيل المثال، قد يعرض تطبيق منصّة عرض بعناصر متغيّرة تتضمّن فيديوهات قصيرة. عند انتهاء أحد الفيديوهات، ينتقل التطبيق إلى الفيديو التالي. وإذا لم يعجب المستخدم الفيديو الذي يشاهده، قد يمرّر سريعًا إلى الفيديو التالي أو السابق.

إذا لم تحمّل محتوى الفيديو مسبقًا، قد يؤدي ذلك إلى تجربة مستخدم محبطة. ينتهي المستخدم من مشاهدة بعض الوسائط ثم يضطر إلى الانتظار حتى يتم تحميل الوسائط التالية.

من ناحية أخرى، إذا حمّلت المحتوى مسبقًا بشكل مفرط، يؤدي ذلك إلى استهلاك الطاقة وعرض نطاق الشبكة لتحميل محتوى قد لا يشغّله المستخدم أبدًا.

DefaultPreloadManager تساعد تطبيقك في تحقيق توازن بين هذه المخاوف. يعمل مدير التحميل المسبق مع تطبيقك لتحديد مدى أهمية كل عنصر من عناصر الوسائط، ويحمّل الكمية المناسبة مسبقًا.

تقسيم العمل

إذا كنت تستخدم DefaultPreloadManager، يتم تنفيذ بعض العمل من خلال الرمز البرمجي، وبعضه من خلال مدير التحميل المسبق.

على تطبيقك تنفيذ ما يلي:

  • إنشاء كائنات ExoPlayer للتطبيق باستخدام كائن DefaultPreloadManager.Builder نفسه الذي تستخدمه لإنشاء مدير التحميل المسبق. استدعاء DefaultPreloadManager.Builder.buildExoPlayer() لإنشاء ExoPlayer.
  • إخبار مدير التحميل المسبق بكل عنصر من عناصر الوسائط التي يجب تتبّعها. قد لا يكون هذا كل المحتوى في منصّة العرض بعناصر متغيّرة، بل يمكنك إخباره فقط عن العناصر القليلة الأولى التي سيتم تشغيلها. أثناء تنقّل المستخدم في منصّة العرض بعناصر متغيّرة، يمكنك إضافة عناصر الوسائط وإزالتها من مجموعة مدير التحميل المسبق.
  • إبطال الأولويات في مدير التحميل المسبق عند تغيير المحتوى في منصّة العرض بعناصر متغيّرة، أو عندما يغيّر المستخدم العنصر الذي يشغّله. يطلب ذلك من مدير التحميل المسبق إعادة تحديد أولوية كل عنصر من عناصر الوسائط، وتحميل المحتوى إذا لزم الأمر. ستبطل مدير التحميل المسبق بعد إضافة عناصر الوسائط لأول مرة، وأيضًا عندما ينتقل المستخدم من عنصر إلى آخر، أو عند إضافة عناصر إلى منصّة العرض بعناصر متغيّرة أو إزالتها منها.
  • الردّ على طلبات البحث من مدير التحميل المسبق، وإخباره بمقدار المحتوى الذي يجب تحميله مسبقًا لكل عنصر.
  • جلب الوسائط من مدير التحميل المسبق عندما يبدأ المستخدم تشغيل عنصر. يمنح مدير التحميل المسبق تطبيقك MediaSource لهذا المحتوى.

  • إيقاف مدير التحميل المسبق عند الانتهاء من استخدامه، ما يؤدي إلى تحرير موارده.

ينفّذ مدير التحميل المسبق ما يلي:

  • يتتبّع جميع عناصر الوسائط التي أضافها تطبيقك إليه.
  • في كل مرة يتم فيها إبطال أولوياته، يستعلم عن تطبيقك من خلال استدعاء TargetPreloadStatusControl الذي تم تنفيذه بواسطة تطبيقك. ويستدعي ذلك لـ معرفة مقدار كل عنصر من عناصر الوسائط التي يجب تحميلها.
  • بعد الاستعلام عن التطبيق، يحمّل مسبقًا الكمية المناسبة من كل عنصر من عناصر الوسائط. يقرّر مدير التحميل المسبق ترتيب تحميل العنصر. ويمنح الأولوية للعناصر الأقرب إلى العنصر الذي يشغّله المستخدم.
  • عندما يطلب التطبيق محتوى، يقدّم مدير التحميل المسبق MediaSource يتضمّن أي محتوى تم تحميله مسبقًا.

سير عمل مدير التحميل المسبق

يصف هذا القسم سير عمل نموذجيًا لتطبيق يستخدم مدير التحميل المسبق. في هذا المثال، نفترض أنّ التطبيق يعرض منصّة عرض بعناصر متغيّرة تتضمّن فيديوهات قصيرة. يتم تشغيل الفيديو المحدّد تلقائيًا، ولكن يمكن للمستخدم تصفّح منصّة العرض بعناصر متغيّرة في أي من الاتجاهَين، ما يؤدي إلى إيقاف الفيديو الذي كان يتم تشغيله وبدء تشغيل الفيديو الذي ينتقل إليه.

تتم مناقشة كل هذه الخطوات بالتفصيل في الصفحات التالية.

  1. ينشئ التطبيق عنصر تحكّم في حالة التحميل المسبق المستهدَفة. يستعلم مدير التحميل المسبق عن عنصر التحكّم هذا لمعرفة مقدار كل عنصر من عناصر الوسائط التي يجب تحميلها.
  2. ينشئ التطبيق DefaultPreloadManager.Builder، ويمرّر عنصر التحكّم في حالة التحميل المسبق المستهدَفة. يستخدم التطبيق بعد ذلك أداة الإنشاء لإنشاء مدير التحميل المسبق.
  3. يضيف التطبيق عناصر الوسائط إلى مدير التحميل المسبق. يقدّم التطبيق فهرسًا لكل عنصر، ما يحدّد موضع العنصر في منصّة العرض بعناصر متغيّرة.
  4. بعد إضافة جميع الوسائط، يستدعي التطبيق invalidate() لإخبار مدير التحميل المسبق بضبط الأولويات لكل عنصر ثم تحميلها مسبقًا.
  5. بالنسبة إلى كل عنصر من عناصر الوسائط، يستدعي مدير التحميل المسبق عنصر التحكّم في التحميل المسبق المستهدَف للاستعلام عن مقدار العنصر الذي يجب تحميله. قد يطلب عنصر التحكّم في التحميل المسبق المستهدَف تحميل مدة معيّنة من المحتوى، أو جلب بيانات وصفية للعنصر فقط، أو عدم جلب أي من هذا العنصر في هذا الوقت. بعد أن يحصل مدير التحميل المسبق على هذه المعلومات، يبدأ تحميل محتوى الوسائط.
  6. عندما يبدأ المستخدم تشغيل المحتوى، يستدعي التطبيق مدير التحميل المسبق لطلب MediaSource لعنصر الوسائط هذا. يستدعي التطبيق أيضًا setCurrentPlayingIndex() لإخبار مدير التحميل المسبق بعنصر الوسائط الذي يتم تشغيله.
  7. إذا انتقل المستخدم إلى عنصر وسائط مختلف، يطلب التطبيق هذا العنصر من مدير التحميل المسبق، ويعدّل أيضًا فهرس التشغيل الحالي. ثم يستدعي invalidate() مرة أخرى لإخبار مدير التحميل المسبق بتعديل أولوياته استنادًا إلى ما يتم تشغيله الآن.
  8. إذا أضاف التطبيق عناصر وسائط إلى منصّة العرض بعناصر متغيّرة أو أزالها منها، يضيف أيضًا هذه العناصر إلى مدير التحميل المسبق أو يزيلها منه، ويستدعي invalidate() عند الانتهاء من ذلك.
  9. في كل مرة يتم فيها إبطال أولويات مدير التحميل المسبق، يستدعي عنصر التحكّم في التحميل المسبق المستهدَف مرة أخرى لمعرفة مقدار كل عنصر يجب تحميله.
  10. عندما يغلق التطبيق منصّة العرض بعناصر متغيّرة، فإنه يوقف مدير التحميل المسبق لتحرير موارده.