मैनेजर के कॉन्सेप्ट प्रीलोड करना

प्रीलोड मैनेजर, उपयोगकर्ताओं को बेहतर अनुभव देने में आपकी मदद करता है. इसकी मदद से, एक आइटम से दूसरे आइटम पर स्विच करने पर, कॉन्टेंट तेज़ी से लोड होता है और उपयोगकर्ताओं को कम इंतज़ार करना पड़ता है. इससे, हर आइटम के लिए प्रीलोड करने की अवधि और रैंकिंग को भी पसंद के मुताबिक बनाया जा सकता है.

सोशल मीडिया में आम तौर पर, कोई ऐप्लिकेशन उपयोगकर्ता को मीडिया विकल्पों की सूची या कैरसेल दिखाता है. उदाहरण के लिए, कोई ऐप्लिकेशन छोटे-छोटे वीडियो का कैरसेल दिखा सकता है. एक वीडियो खत्म होने के बाद, ऐप्लिकेशन अगले वीडियो पर स्विच कर जाता है. अगर उपयोगकर्ता को वह वीडियो पसंद नहीं आता जो वह देख रहा है, तो वह अगले या पिछले वीडियो पर स्वाइप कर सकता है.

अगर वीडियो कॉन्टेंट को प्रीलोड नहीं किया जाता है, तो इससे उपयोगकर्ता को खराब अनुभव हो सकता है. उपयोगकर्ता एक मीडिया आइटम देख लेता है और फिर उसे अगले मीडिया आइटम के लोड होने का इंतज़ार करना पड़ता है.

दूसरी ओर, अगर कॉन्टेंट को बहुत ज़्यादा प्रीलोड किया जाता है, तो इससे बैटरी और नेटवर्क बैंडविथ की खपत होती है. ऐसा कॉन्टेंट लोड होता है जिसे उपयोगकर्ता शायद कभी न देखे.

DefaultPreloadManager आपके ऐप्लिकेशन को इन समस्याओं को हल करने में मदद करता है. प्रीलोड मैनेजर, आपके ऐप्लिकेशन के साथ मिलकर यह तय करता है कि हर मीडिया आइटम कितना ज़रूरी है. इसके बाद, वह उसे पहले से लोड कर लेता है.

काम का बंटवारा

अगर DefaultPreloadManager का इस्तेमाल किया जाता है, तो कुछ काम आपका कोड करता है और कुछ काम प्रीलोड मैनेजर करता है.

आपके ऐप्लिकेशन को ये काम करने होते हैं:

प्रीलोड मैनेजर ये काम करता है:

  • यह उन सभी मीडिया आइटम को ट्रैक करता है जिन्हें आपके ऐप्लिकेशन ने इसमें जोड़ा है.
  • जब भी इसकी प्राथमिकताएं अमान्य होती हैं, तो यह आपके ऐप्लिकेशन से क्वेरी करता है. इसके लिए, यह आपके ऐप्लिकेशन में लागू किए गए TargetPreloadStatusControl को कॉल करता है. यह कॉल, हर मीडिया आइटम का कितना हिस्सा लोड करना है, यह जानने के लिए किया जाता है.
  • ऐप्लिकेशन से क्वेरी करने के बाद, यह हर मीडिया आइटम का ज़रूरी हिस्सा प्रीलोड करता है. प्रीलोड मैनेजर, आइटम को लोड करने का क्रम तय करता है. यह उन आइटम को प्राथमिकता देता है जो उपयोगकर्ता के चलाए जा रहे आइटम के सबसे करीब होते हैं.
  • जब ऐप्लिकेशन, कॉन्टेंट का अनुरोध करता है, तो प्रीलोड मैनेजर, MediaSource के साथ वह कॉन्टेंट उपलब्ध कराता है जो पहले से लोड किया गया है.

प्रीलोड मैनेजर का वर्कफ़्लो

इस सेक्शन में, प्रीलोड मैनेजर का इस्तेमाल करने वाले किसी ऐप्लिकेशन के सामान्य वर्कफ़्लो के बारे में बताया गया है. इस उदाहरण में, हम मान लेते हैं कि ऐप्लिकेशन, छोटे-छोटे वीडियो का कैरसेल दिखाता है. चुना गया वीडियो अपने-आप चलने लगता है. हालांकि, उपयोगकर्ता कैरसेल को किसी भी दिशा में स्क्रोल कर सकता है. इससे, चल रहा वीडियो रुक जाता है और वह वीडियो चलने लगता है जिस पर उपयोगकर्ता स्क्रोल करता है.

इन सभी चरणों के बारे में अगले पेजों पर विस्तार से बताया गया है.

  1. ऐप्लिकेशन, प्रीलोड की स्थिति को कंट्रोल करने वाला टारगेट बनाता है. प्रीलोड मैनेजर, इस कंट्रोल से क्वेरी करके यह पता लगाता है कि हर मीडिया आइटम का कितना हिस्सा लोड करना है.
  2. ऐप्लिकेशन, DefaultPreloadManager.Builder बनाता है और प्रीलोड की स्थिति को कंट्रोल करने वाला टारगेट पास करता है. इसके बाद, ऐप्लिकेशन, बिल्डर का इस्तेमाल करके प्रीलोड मैनेजर बनाता है.
  3. ऐप्लिकेशन, प्रीलोड मैनेजर में मीडिया आइटम जोड़ता है. ऐप्लिकेशन, हर आइटम के लिए एक इंडेक्स उपलब्ध कराता है. इससे, कैरसेल में आइटम की जगह तय होती है.
  4. सभी मीडिया जोड़ने के बाद, ऐप्लिकेशन invalidate() को कॉल करता है. इससे, प्रीलोड मैनेजर को हर आइटम के लिए प्राथमिकताएं सेट करने और उन्हें प्रीलोड करने का निर्देश मिलता है.
  5. हर मीडिया आइटम के लिए, प्रीलोड मैनेजर, प्रीलोड की स्थिति को कंट्रोल करने वाले टारगेट को कॉल करके यह क्वेरी करता है कि आइटम का कितना हिस्सा लोड किया जाना चाहिए. प्रीलोड की स्थिति को कंट्रोल करने वाला टारगेट, कॉन्टेंट की एक तय अवधि लोड करने, सिर्फ़ आइटम का मेटाडेटा फ़ेच करने या फ़िलहाल उस आइटम को फ़ेच न करने का निर्देश दे सकता है. प्रीलोड मैनेजर को यह जानकारी मिलने के बाद, वह मीडिया कॉन्टेंट लोड करना शुरू कर देता है.
  6. जब उपयोगकर्ता कॉन्टेंट चलाना शुरू करता है, तो ऐप्लिकेशन, प्रीलोड मैनेजर को कॉल करता है उस मीडिया आइटम के लिए MediaSource का अनुरोध करने के लिए. ऐप्लिकेशन, setCurrentPlayingIndex() को भी कॉल करता है. इससे, प्रीलोड मैनेजर को यह पता चलता है कि कौनसा मीडिया आइटम चलाया जा रहा है.
  7. अगर उपयोगकर्ता किसी दूसरे मीडिया आइटम पर जाता है, तो ऐप्लिकेशन, प्रीलोड मैनेजर से उस आइटम का अनुरोध करता है. साथ ही, फ़िलहाल चल रहे इंडेक्स को भी अपडेट करता है. इसके बाद, यह invalidate() को फिर से कॉल करता है. इससे, प्रीलोड मैनेजर को अपनी प्राथमिकताएं अपडेट करने का निर्देश मिलता है. ये प्राथमिकताएं, इस आधार पर तय की जाती हैं कि फ़िलहाल कौनसा आइटम चलाया जा रहा है.
  8. अगर ऐप्लिकेशन, कैरसेल में मीडिया आइटम जोड़ता या हटाता है, तो वह उन आइटम को प्रीलोड मैनेजर में भी जोड़ता या हटाता है. इसके बाद, वह invalidate() को कॉल करता है.
  9. जब भी प्रीलोड मैनेजर की प्राथमिकताएं अमान्य होती हैं, तो वह प्रीलोड की स्थिति को कंट्रोल करने वाले टारगेट को फिर से कॉल करके यह पता लगाता है कि हर आइटम का कितना हिस्सा लोड करना है.
  10. कैरसेल बंद करने पर, ऐप्लिकेशन, प्रीलोड मैनेजर को रिलीज़ कर देता है, ताकि उसके संसाधन खाली हो जाएं.