בדף הזה מוסבר איך להשתמש בכלי לניהול טעינה מראש כדי לנהל תוכן וידאו. אם משתמשים במנהל טרום-טעינה, אפשר לשפר את חוויית המשתמש. כשהמשתמש עובר מפריט מדיה אחד לפריט אחר, ההפעלה מתחילה מהר יותר כי המנהל כבר טען חלק מהתוכן.
בדף הזה מפורטים הנושאים הבאים:
- הוספת פריטי מדיה למנהל הטעינה מראש
- אחזור והפעלה של מדיה
- הסרת פריטים מהכלי לניהול טעינה מראש
- איך משחררים את מנהל הטעינה מראש כשמסיימים להשתמש בו
הוספת פריטי מדיה למנהל הטעינה מראש
צריך להגדיר למנהל הטעינה מראש כל פריט מדיה שהוא יעקוב אחריו. לדוגמה, אם באפליקציה יש קרוסלה של סרטונים, צריך להוסיף אותם למנהל הטעינה מראש. בהתאם לתרחיש השימוש, יכול להיות שתוסיפו את כל הסרטונים, או רק את כל הסרטונים שקרובים לסרטון שמופעל כרגע. אפשר גם להוסיף פריטים חדשים למנהל הטעינה מראש בהמשך.
כדי לעשות את זה, אפשר להשתמש בשיטת הוספה של קבוצות כמו addMediaItems. אפשר גם להתקשר למספר add (או addMediaSource) כדי להוסיף פריטי מדיה בנפרד. עם זאת, הוספה של פריטי מדיה בנפרד לא מפעילה אוטומטית טעינה מראש. כשמשתמשים בשיטות נפרדות, צריך לקרוא באופן מפורש ל-invalidate אחרי שמסיימים להוסיף פריטים, כדי להנחות את הכלי לניהול טעינה מראש לעדכן את העדיפויות ולהתחיל בטעינה מראש.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
מידע חשוב על הקוד
- בקטע הקוד הזה מוצג איך לאכלס את הכלי לניהול טעינה מראש בהתחלה במצב אצווה אחרי שיוצרים אותו. אפשר להתקשר אל
addMediaItemsכדי להוסיף פריטים למנהל טעינה מראש קיים ומאוכלס. - בקטע הקוד הזה,
pullMediaItemsFromService()היא הלוגיקה של האפליקציה לאחזור רשימת התוכן להפעלה. הקוד קורא ל-method כדי לאחזר רשימה של עד 20 פריטים. -
preloadManagerהואDefaultPreloadManagerשנוצר ב-Create aDefaultPreloadManager. -
rankingDataהוא ערך שמנהל הטעינה מראש משתמש בו כדי לקבוע את העדיפות של כל פריט מדיה. במקרה שלDefaultPreloadManager, rankingDataהוא מספר שלם <0x0A>שמייצג את המיקום של הפריט בקרוסלה. מנהל הטעינה מראש קובע את העדיפות לפי המרחק של כל פריט מהפריט שמופעל כרגע.
אחזור והפעלה של מדיה
כשמשתמש עובר לפריט מדיה חדש, צריך לקבל את פריט המדיה ממנהל הטעינה מראש. אם מנהל הטעינה מראש טען חלק מהתוכן, התוכן יופעל מהר יותר מאשר אם לא הייתם משתמשים במנהל הטעינה מראש. אם מנהל הטעינה מראש עדיין לא טען תוכן מהפריט, התוכן יופעל כרגיל.
צריך גם לעדכן את אינדקס ההפעלה הנוכחי במנהל הטעינה מראש באמצעות קריאה ל-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הוא Media3ExoPlayerשהאפליקציה משתמשת בו כדי להפעיל את התוכן. צריך ליצור את הנגן הזה על ידי קריאה ל-DefaultPreloadManager.Builder.buildExoPlayer()באותו אובייקט builder שבו השתמשתם כדי ליצור את מנהל הטעינה מראש. - כשהמשתמש עובר לפריט מדיה חדש, האפליקציה קוראת ל-
getMediaSource()כדי לקבל את מקור המדיה ממנהל הטעינה מראש. צריך לבחורmediaItemשכבר הוספתם לכלי לניהול טעינה מראש. לא נורא אם מנהל הטעינה מראש עדיין לא התחיל לטעון את התוכן. במקרה כזה, הוא מחזירMediaSourceבלי נתונים שנטענו מראש. לדוגמה, זה יכול לקרות אם המשתמש עובר במהירות קדימה בקרוסלה. - אחרי שהמשתמש מפעיל את פריט המדיה החדש, צריך להפעיל את
setCurrentPlayingIndexכדי לציין למנהל הטעינה מראש את המיקום של הפריט החדש בקרוסלה. מנהל הטעינה מראש צריך את המידע הזה כדי לתעדף את הטעינה של הפריט הבא.
הסרת פריטים ממנהל הטעינה מראש
כדי לשמור על יעילות מנהל הטעינה מראש, כדאי להסיר פריטים שמנהל הטעינה מראש כבר לא צריך לעקוב אחריהם. אפשר גם להסיר פריטים שעדיין נמצאים בקרוסלה, אבל רחוקים מהמיקום הנוכחי של המשתמש. לדוגמה, יכול להיות שתחליטו שאם פריט נמצא במרחק של יותר מ-15 פריטים ממה שהמשתמש צופה בו, אין צורך לטעון אותו מראש. במקרה כזה, תסירו פריטים כשהם יתרחקו עד כדי כך. אם המשתמש יתקרב שוב לפריטים שהוסרו, תמיד תוכלו להוסיף אותם מחדש.
אם יש לכם רשימה של פריטי מדיה שאתם רוצים להסיר, אתם יכולים להשתמש ב-removeMediaItems. אפשר גם להתקשר אל remove (או אל removeMediaSource) כדי להסיר פריטי מדיה בנפרד.
preloadManager.removeMediaItems(mediaItemsToRemove)
מידע חשוב על הקוד
- אם רוצים להסיר את כל הפריטים ממנהל הטעינה מראש, אפשר להשתמש בפונקציה
reset()במקום בפונקציהremove(). הגישה הזו שימושית אם רוצים לשנות את כל הפריטים בקרוסלה. במקרה כזה, אחרי שמסירים את הפריטים, צריך להוסיף פריטים חדשים לכלי לניהול טרום-טעינה.
שחרור מנהל הטעינה מראש כשמסיימים להשתמש בו
כשאין יותר צורך במנהל הטעינה מראש, צריך לשחרר אותו כדי לפנות את המשאבים שלו. חשוב במיוחד לשחרר את הנעילה כשהפעילות מושמדת.
preloadManager.release()
מידע חשוב על הקוד
- אסור לבצע קריאה לאף אחת מהשיטות של האובייקט אחרי שמשחררים אותו.
- אם אתם צריכים ליצור עוד מנהל טרום-טעינה, אתם יכולים ליצור
DefaultPreloadManager.Builderחדש ולהשתמש בו כדי ליצור אתDefaultPreloadManager. אל תנסו לעשות שימוש חוזר בכלי הישן לבניית אתרים.