MediaPlayer की स्थिति और संसाधनों को मैनेज करना

इस दस्तावेज़ में, दो ऐसे पहलुओं के बारे में बताया गया है जिनमें गड़बड़ी होने की संभावना होती है.

  • स्टेट. "Medialayer" के साथ, कुछ कार्रवाइयां सिर्फ़ चुनिंदा स्टेट में ही मान्य होती हैं. गलत कार्रवाइयों की वजह से, गड़बड़ियां हो सकती हैं या अनचाहा व्यवहार हो सकता है.

  • संसाधन कॉन्फ़िगरेशन में बदलाव करने पर, जैसे कि स्क्रीन रोटेट करने पर, आपको MediaPlayer ऑब्जेक्ट को रिलीज़ करना होगा, ताकि सिस्टम के संसाधन खाली हो जाएं और संसाधन खत्म न हों.

स्टेट मैनेज करना

MediaPlayer स्टेट पर आधारित होता है. इसका मतलब है कि इसमें एक इंटरनल स्टेट होती है. कोड लिखते समय, आपको हमेशा इसके बारे में पता होना चाहिए, क्योंकि कुछ कार्रवाइयां सिर्फ़ तब मान्य होती हैं, जब प्लेयर चुनिंदा स्टेट में हो. अगर आपने गलत स्टेट में कोई कार्रवाई की, तो सिस्टम गड़बड़ी दिखा सकता है या अन्य समस्याएं हो सकती हैं.

MediaPlayer क्लास के दस्तावेज़ में मौजूद स्टेट डायग्राम से यह साफ़ होता है कि किन तरीकों से MediaPlayer को एक स्टेट से दूसरी स्टेट में ले जाया जा सकता है. उदाहरण के लिए:

  • नया MediaPlayer बनाने पर, यह Idle स्टेट में होता है.
  • setDataSource() को कॉल करके, इसे शुरू किया जाता है. इससे यह Initialized स्टेट में बदल जाता है.
  • prepare() या prepareAsync() तरीके का इस्तेमाल करके, इसे तैयार किया जाता है.
  • MediaPlayer के तैयार होने के बाद, यह Prepared स्टेट में आ जाता है. इसका मतलब है कि मीडिया चलाने के लिए, start() को कॉल किया जा सकता है.

इसके बाद, जैसा कि डायग्राम में दिखाया गया है, start(), pause(), और seekTo() जैसे तरीकों को कॉल करके, Started, Paused और PlaybackCompleted स्टेट के बीच स्विच किया जा सकता है.

हालांकि, stop() को कॉल करने पर, ध्यान दें कि MediaPlayer को फिर से तैयार किए बिना, start() को फिर से कॉल नहीं किया जा सकता.

स्टेट डायग्राम को हमेशा ध्यान में रखें, जब आप ऐसा कोड लिख रहे हों जो किसी MediaPlayer ऑब्जेक्ट के साथ इंटरैक्ट करता है. ऐसा इसलिए, क्योंकि गलत स्टेट से इसके तरीकों को कॉल करने पर, अक्सर गड़बड़ियां होती हैं.

MediaPlayer को रिलीज़ करना

A MediaPlayer, सिस्टम के अहम संसाधनों का इस्तेमाल कर सकता है. इसलिए, आपको हमेशा यह पक्का करने के लिए ज़्यादा सावधानी बरतनी चाहिए कि आपने MediaPlayer इंस्टेंस को ज़रूरत से ज़्यादा समय तक न रखा हो. इसका इस्तेमाल पूरा होने के बाद, आपको हमेशा release() को कॉल करना चाहिए, ताकि इसके लिए आवंटित सिस्टम के सभी संसाधन सही तरीके से रिलीज़ हो जाएं.

उदाहरण के लिए, अगर आपने MediaPlayer का इस्तेमाल किया है और आपकी गतिविधि को onStop() पर कॉल मिलता है, तो आपको MediaPlayer को रिलीज़ करना होगा. ऐसा इसलिए, क्योंकि जब आपकी गतिविधि उपयोगकर्ता के साथ इंटरैक्ट नहीं कर रही है, तब इसे बनाए रखने का कोई मतलब नहीं है. हालांकि, अगर बैकग्राउंड में मीडिया चलाया जा रहा है, तो इसे बनाए रखा जा सकता है. इसके बारे में अगले सेक्शन में बताया गया है.

जब आपकी गतिविधि फिर से शुरू होती है या रीस्टार्ट होती है, तो आपको एक नया MediaPlayer बनाना होगा और प्लेबैक फिर से शुरू करने से पहले, इसे फिर से तैयार करना होगा.

यहां बताया गया है कि आपको अपने MediaPlayer को कैसे रिलीज़ करना चाहिए और फिर उसे शून्य करना चाहिए:

Kotlin

mediaPlayer?.release()
mediaPlayer = null

Java

mediaPlayer.release();
mediaPlayer = null;

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

रनटाइम रीस्टार्ट के बारे में ज़्यादा जानने के लिए, रनटाइम में होने वाले बदलावों को मैनेज करना लेख पढ़ें.

आपको यह जानकर हैरानी हो सकती है कि अगर उपयोगकर्ता आपकी गतिविधि से बाहर निकल जाता है, तब भी "बैकग्राउंड मीडिया" को चलाने के लिए क्या करना होगा. यह ठीक उसी तरह काम करता है जैसे कि संगीत चलाने वाला अंतर्निहित ऐप्लिकेशन काम करता है. इस मामले में, आपको एक ऐसे MediaPlayer की ज़रूरत होती है जिसे किसी सेवा से कंट्रोल किया जाता है. इसके बारे में अगले सेक्शन में बताया गया है

ज़्यादा जानें

अपने ऐप्लिकेशन में मीडिया चलाने के लिए, Jetpack Media3 का इस्तेमाल करने का सुझाव दिया जाता है. इसके बारे में ज़्यादा पढ़ें.

इन पेजों में, ऑडियो और वीडियो रिकॉर्ड करने, सेव करने, और चलाने से जुड़े विषयों के बारे में बताया गया है: