בדף הזה מוסבר איך להשתמש במנהל טעינה מראש כדי לנהל קטע וידאו. שימוש במנהל טעינה מראש מאפשר לכם לספק למשתמשים חוויה טובה יותר. כשהמשתמשים עוברים מקובץ מדיה אחד לאחר, ההפעלה מתחילה מהר יותר כי המנהל כבר טען חלק מהתוכן.
בדף הזה מפורטים הנושאים הבאים:
- הוספת קובצי מדיה למנהל הטעינה מראש
- אחזור והפעלה של מדיה
- הסרת פריטים ממנהל הטעינה מראש
- שחרור מנהל הטעינה מראש בסיום השימוש
הוספת קובצי מדיה למנהל הטעינה מראש
צריך להגדיר למנהל הטעינה מראש כל קובץ מדיה שהוא יעקוב אחריו. לדוגמה, אם באפליקציה יש קרוסלת סרטונים, צריך להוסיף אותם למנהל הטעינה מראש. בהתאם לתרחיש לדוגמה, אתם יכולים להוסיף את כל הסרטונים או רק את כל הסרטונים שקרובים לסרטון שמופעל כרגע. אפשר גם להוסיף פריטים חדשים למנהל הטעינה מראש מאוחר יותר.
כדי לעשות את זה, משתמשים בשיטה להוספה בכמות גדולה כמו addMediaItems (או addMediaSources). לחלופין, אפשר להפעיל את add (או addMediaSource) כדי להוסיף קובצי מדיה בנפרד. עם זאת, הוספה של קובצי מדיה בנפרד לא מפעילה טעינה מראש באופן אוטומטי. כשמשתמשים בשיטות נפרדות, צריך להפעיל באופן מפורש את invalidate אחרי שמסיימים להוסיף פריטים, כדי להורות למנהל הטעינה מראש לעדכן את סדרי העדיפויות ולהתחיל בטעינה מראש.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
מידע חשוב על הקוד
- קטע הקוד הזה מראה איך לאכלס בהתחלה את מנהל הטעינה מראש במצב אצווה אחרי שיצרתם אותו. אפשר להפעיל את
addMediaItemsכדי להוסיף פריטים למנהל טעינה מראש קיים ומאוכלס. - בקטע הקוד הזה,
pullMediaItemsFromService()הוא הלוגיקה של האפליקציה לאחזור רשימת התוכן להפעלה. הקוד שולח קריאה ל-method כדי לאחזר רשימה של עד 20 פריטים. -
preloadManagerהוא ה-DefaultPreloadManagerשנוצר בשלב יצירתDefaultPreloadManager. -
rankingDataהוא ערך שמנהל הטעינה מראש משתמש בו כדי לקבוע את העדיפות של כל קובץ מדיה. במקרה שלDefaultPreloadManager, הערך שלrankingDataהוא מספר שלם שמייצג את מיקום הפריט בקרוסלה. מנהל הטעינה מראש קובע את העדיפות לפי המרחק של כל פריט מהפריט שמופעל כרגע.
אחזור והפעלה של מדיה
כשהמשתמש עובר לקובץ מדיה חדש, צריך לקבל את קובץ המדיה ממנהל הטעינה מראש. אם מנהל הטעינה מראש טען חלק מהתוכן, התוכן יופעל מהר יותר מאשר אם לא הייתם משתמשים במנהל הטעינה מראש. אם מנהל הטעינה מראש עדיין לא טען תוכן מהפריט הזה, התוכן מופעל כרגיל.
צריך גם לעדכן את האינדקס של מה שמופעל כרגע במנהל הטעינה מראש באמצעות קריאה ל-setCurrentPlayingIndex, כדי שמנהל הטעינה מראש יוכל לקבוע את סדרי העדיפויות של פעולות הטעינה מראש בעתיד.
// When a media item is about to be displayed on the screen val mediaSource = preloadManager.getMediaSource(mediaItem) if (mediaSource != null) { player.setMediaSource(mediaSource) } else { // If the mediaSource is null, its mediaItem hasn't been added to the preload // manager yet. Send it directly to the player when it's about to play. player.setMediaItem(mediaItem) } player.prepare() // When the media item is being displayed at the center of the screen ("in focus") player.play() // Update the current playing index to let the preload manager know where the user // is in the carousel/pagination/list. preloadManager.setCurrentPlayingIndex(currentIndex)
מידע חשוב על הקוד
-
playerהואExoPlayerשל Media3 שבו האפליקציה משתמשת כדי להפעיל את התוכן. כדי ליצור את הנגן הזה, צריך להפעיל אתDefaultPreloadManager.Builder.buildExoPlayer()באותו builder שבו השתמשתם כדי ליצור את מנהל הטעינה מראש. - כשהמשתמש עובר לקובץ מדיה חדש, האפליקציה מפעילה את
getMediaSource()כדי לקבל את מקור המדיה ממנהל הטעינה מראש. הערך הזה חייב להיותmediaItemשכבר הוספתם למנהל הטעינה מראש. זה בסדר אם מנהל הטעינה מראש עדיין לא התחיל לטעון את התוכן. במקרה כזה, הוא מחזירMediaSourceשלא מכיל נתונים שנטענו מראש. לדוגמה, זה יכול לקרות אם המשתמש מדלג פתאום קדימה בקרוסלה. - אחרי שהמשתמש מפעיל את קובץ המדיה החדש, צריך להפעיל את
setCurrentPlayingIndexכדי להודיע למנהל הטעינה מראש איפה בקרוסלה נמצא הקובץ החדש. מנהל הטעינה מראש צריך את המידע הזה כדי לתעדף את הטעינה של הקובץ הבא.
הסרת פריטים ממנהל הטעינה מראש
כדי לשמור על היעילות של מנהל הטעינה מראש, כדאי להסיר פריטים שמנהל הטעינה מראש כבר לא צריך לעקוב אחריהם. אפשר גם להסיר פריטים שעדיין נמצאים בקרוסלה, אבל רחוקים מהמיקום הנוכחי של המשתמש. לדוגמה, יכול להיות שתחליטו שאם פריט נמצא במרחק של יותר מ-15 פריטים מהפריט שהמשתמש צופה בו, אין צורך לטעון אותו מראש. במקרה כזה, תצטרכו להסיר פריטים כשהם יגיעו למרחק הזה. אם המשתמש חוזר לפריטים שהוסרו, תמיד אפשר להוסיף אותם בחזרה.
אם יש לכם רשימה של קובצי מדיה שאתם רוצים להסיר, אתם יכולים להשתמש ב-removeMediaItems (או ב-removeMediaSources). לחלופין, אתם יכולים להפעיל את remove (או את removeMediaSource) כדי להסיר קובצי מדיה בנפרד.
preloadManager.removeMediaItems(mediaItemsToRemove)
מידע חשוב על הקוד
- אם רוצים להסיר את כל הפריטים ממנהל הטעינה מראש, אפשר להפעיל את
reset()במקום אתremove(). הגישה הזו שימושית אם אתם צריכים לשנות את כל הפריטים בקרוסלה. במקרה כזה, אחרי שמסירים את הפריטים, צריך להוסיף פריטים חדשים למנהל הטעינה מראש.
שחרור מנהל הטעינה מראש כשמסיימים להשתמש בו
כשלא צריך יותר את מנהל הטעינה מראש, צריך לשחרר אותו כדי לפנות את המשאבים שלו. חשוב במיוחד לשחרר אותו כשהפעילות מושמדת.
preloadManager.release()
מידע חשוב על הקוד
- אסור להפעיל אף אחת מהשיטות של האובייקט אחרי שמשחררים אותו.
- אם אתם צריכים ליצור מנהל טעינה מראש נוסף, צרו
DefaultPreloadManager.Builderחדש והשתמשו בו כדי ליצור את ה-DefaultPreloadManager. אל תנסו להשתמש שוב בכלי הישן ליצירת דוחות.