مدیریت وضعیت و منابع MediaPlayer، مدیریت وضعیت و منابع MediaPlayer، مدیریت وضعیت و منابع MediaPlayer، مدیریت وضعیت و منابع 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 را آزاد کنید

یک MediaPlayer می تواند منابع ارزشمند سیستم را مصرف کند. بنابراین، همیشه باید اقدامات احتیاطی بیشتری انجام دهید تا مطمئن شوید که بیش از حد لازم به یک نمونه MediaPlayer معطل نمی شوید. وقتی کار با آن تمام شد، همیشه باید release() فراخوانی کنید تا مطمئن شوید منابع سیستمی که به آن اختصاص داده شده است به درستی آزاد شده اند.

به عنوان مثال، اگر از MediaPlayer استفاده می‌کنید و فعالیت شما با onStop() تماس دریافت می‌کند، باید MediaPlayer را آزاد کنید، زیرا نگه داشتن آن در حالی که فعالیت شما با کاربر ارتباط برقرار نمی‌کند منطقی نیست (مگر اینکه در حال بازی کردن باشید). رسانه در پس زمینه، که در بخش بعدی مورد بحث قرار می گیرد).

وقتی فعالیت شما از سر گرفته می شود یا دوباره شروع می شود، البته باید یک MediaPlayer جدید ایجاد کنید و قبل از از سرگیری پخش دوباره آن را آماده کنید.

در اینجا نحوه انتشار و سپس لغو MediaPlayer آمده است:

کاتلین

mediaPlayer?.release()
mediaPlayer = null

جاوا

mediaPlayer.release();
mediaPlayer = null;

به عنوان مثال، مشکلاتی را در نظر بگیرید که اگر فراموش کنید MediaPlayer را با توقف فعالیت خود آزاد کنید، اما با شروع مجدد فعالیت، یک مدیا پلیر جدید ایجاد کنید. هنگامی که کاربر جهت صفحه نمایش را تغییر می دهد (یا پیکربندی دستگاه را به روش دیگری تغییر می دهد)، سیستم به طور پیش فرض فعالیت را مجدداً راه اندازی می کند. هنگامی که کاربر دستگاه را بین عمودی و منظره به جلو و عقب می چرخاند، ممکن است به سرعت تمام منابع سیستم را مصرف کنید، زیرا در هر تغییر جهت، یک MediaPlayer جدید ایجاد می کنید که هرگز آن را آزاد نمی کنید.

برای اطلاعات بیشتر در مورد راه اندازی مجدد زمان اجرا، به مدیریت تغییرات زمان اجرا مراجعه کنید.

ممکن است از خود بپرسید که اگر بخواهید حتی زمانی که کاربر فعالیت شما را ترک می‌کند، به پخش "رسانه پس‌زمینه" ادامه دهید، چه اتفاقی می‌افتد، دقیقاً به همان روشی که برنامه موسیقی داخلی رفتار می‌کند. در این مورد، آنچه شما نیاز دارید MediaPlayer است که توسط یک سرویس کنترل می شود، همانطور که در بخش بعدی بحث شد

بیشتر بدانید

Jetpack Media3 راه حل پیشنهادی برای پخش رسانه در برنامه شما است. در مورد آن بیشتر بخوانید .

این صفحات موضوعات مربوط به ضبط، ذخیره و پخش صدا و تصویر را پوشش می دهند:

،

این سند دو حوزه با مشکلات احتمالی را پوشش می دهد.

  • ایالت با "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 را آزاد کنید

یک MediaPlayer می تواند منابع ارزشمند سیستم را مصرف کند. بنابراین، همیشه باید اقدامات احتیاطی بیشتری انجام دهید تا مطمئن شوید که بیش از حد لازم به یک نمونه MediaPlayer معلق نمی‌شوید. وقتی کار با آن تمام شد، همیشه باید release() فراخوانی کنید تا مطمئن شوید منابع سیستمی که به آن اختصاص داده شده است به درستی آزاد شده اند.

به عنوان مثال، اگر از MediaPlayer استفاده می‌کنید و فعالیت شما با onStop() تماس دریافت می‌کند، باید MediaPlayer را آزاد کنید، زیرا نگه داشتن آن در حالی که فعالیت شما با کاربر ارتباط برقرار نمی‌کند منطقی نیست (مگر اینکه در حال بازی کردن باشید). رسانه در پس زمینه، که در بخش بعدی مورد بحث قرار می گیرد).

وقتی فعالیت شما از سر گرفته می شود یا دوباره شروع می شود، البته باید یک MediaPlayer جدید ایجاد کنید و قبل از از سرگیری پخش دوباره آن را آماده کنید.

در اینجا نحوه انتشار و سپس لغو MediaPlayer آمده است:

کاتلین

mediaPlayer?.release()
mediaPlayer = null

جاوا

mediaPlayer.release();
mediaPlayer = null;

به عنوان مثال، مشکلاتی را در نظر بگیرید که اگر فراموش کنید MediaPlayer را با توقف فعالیت خود آزاد کنید، اما با شروع مجدد فعالیت، یک مدیا پلیر جدید ایجاد کنید. هنگامی که کاربر جهت صفحه نمایش را تغییر می دهد (یا پیکربندی دستگاه را به روش دیگری تغییر می دهد)، سیستم به طور پیش فرض فعالیت را مجدداً راه اندازی می کند. هنگامی که کاربر دستگاه را بین عمودی و منظره به جلو و عقب می چرخاند، ممکن است به سرعت تمام منابع سیستم را مصرف کنید، زیرا در هر تغییر جهت، یک MediaPlayer جدید ایجاد می کنید که هرگز آن را آزاد نمی کنید.

برای اطلاعات بیشتر در مورد راه اندازی مجدد زمان اجرا، به مدیریت تغییرات زمان اجرا مراجعه کنید.

ممکن است از خود بپرسید که اگر بخواهید حتی زمانی که کاربر فعالیت شما را ترک می‌کند، به پخش "رسانه پس‌زمینه" ادامه دهید، چه اتفاقی می‌افتد، دقیقاً به همان روشی که برنامه موسیقی داخلی رفتار می‌کند. در این مورد، چیزی که شما نیاز دارید یک MediaPlayer است که توسط یک سرویس کنترل می شود، همانطور که در بخش بعدی بحث شد

بیشتر بدانید

Jetpack Media3 راه حل پیشنهادی برای پخش رسانه در برنامه شما است. در مورد آن بیشتر بخوانید .

این صفحات موضوعات مربوط به ضبط، ذخیره و پخش صدا و تصویر را پوشش می دهند:

،

این سند دو حوزه با مشکلات احتمالی را پوشش می دهد.

  • ایالت با "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 را آزاد کنید

یک MediaPlayer می تواند منابع ارزشمند سیستم را مصرف کند. بنابراین، همیشه باید اقدامات احتیاطی بیشتری انجام دهید تا مطمئن شوید که بیش از حد لازم به یک نمونه MediaPlayer معلق نمی‌شوید. وقتی کار با آن تمام شد، همیشه باید release() فراخوانی کنید تا مطمئن شوید منابع سیستمی که به آن اختصاص داده شده است به درستی آزاد شده اند.

به عنوان مثال، اگر از MediaPlayer استفاده می‌کنید و فعالیت شما با onStop() تماس دریافت می‌کند، باید MediaPlayer را آزاد کنید، زیرا نگه داشتن آن در حالی که فعالیت شما با کاربر ارتباط برقرار نمی‌کند منطقی نیست (مگر اینکه در حال بازی کردن باشید). رسانه در پس زمینه، که در بخش بعدی مورد بحث قرار می گیرد).

وقتی فعالیت شما از سر گرفته می شود یا دوباره شروع می شود، البته باید یک MediaPlayer جدید ایجاد کنید و قبل از از سرگیری پخش دوباره آن را آماده کنید.

در اینجا نحوه انتشار و سپس لغو MediaPlayer آمده است:

کاتلین

mediaPlayer?.release()
mediaPlayer = null

جاوا

mediaPlayer.release();
mediaPlayer = null;

به عنوان مثال، مشکلاتی را در نظر بگیرید که اگر فراموش کنید MediaPlayer را با توقف فعالیت خود آزاد کنید، اما با شروع مجدد فعالیت، یک مدیا پلیر جدید ایجاد کنید. هنگامی که کاربر جهت صفحه نمایش را تغییر می دهد (یا پیکربندی دستگاه را به روش دیگری تغییر می دهد)، سیستم به طور پیش فرض فعالیت را مجدداً راه اندازی می کند. هنگامی که کاربر دستگاه را بین عمودی و منظره به جلو و عقب می چرخاند، ممکن است به سرعت تمام منابع سیستم را مصرف کنید، زیرا در هر تغییر جهت، یک MediaPlayer جدید ایجاد می کنید که هرگز آن را آزاد نمی کنید.

برای اطلاعات بیشتر در مورد راه اندازی مجدد زمان اجرا، به مدیریت تغییرات زمان اجرا مراجعه کنید.

ممکن است از خود بپرسید که اگر بخواهید حتی زمانی که کاربر فعالیت شما را ترک می‌کند، به پخش "رسانه پس‌زمینه" ادامه دهید، چه اتفاقی می‌افتد، دقیقاً به همان روشی که برنامه موسیقی داخلی رفتار می‌کند. در این مورد، آنچه شما نیاز دارید MediaPlayer است که توسط یک سرویس کنترل می شود، همانطور که در بخش بعدی بحث شد

بیشتر بدانید

Jetpack Media3 راه حل پیشنهادی برای پخش رسانه در برنامه شما است. در مورد آن بیشتر بخوانید .

این صفحات موضوعات مربوط به ضبط، ذخیره و پخش صدا و تصویر را پوشش می دهند:

،

این سند دو حوزه با مشکلات احتمالی را پوشش می دهد.

  • ایالت با "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 را آزاد کنید

یک MediaPlayer می تواند منابع ارزشمند سیستم را مصرف کند. بنابراین، همیشه باید اقدامات احتیاطی بیشتری انجام دهید تا مطمئن شوید که بیش از حد لازم به یک نمونه MediaPlayer معلق نمی‌شوید. وقتی کار با آن تمام شد، همیشه باید release() فراخوانی کنید تا مطمئن شوید منابع سیستمی که به آن اختصاص داده شده است به درستی آزاد شده اند.

به عنوان مثال، اگر از MediaPlayer استفاده می‌کنید و فعالیت شما با onStop() تماس دریافت می‌کند، باید MediaPlayer را آزاد کنید، زیرا نگه داشتن آن در حالی که فعالیت شما با کاربر ارتباط برقرار نمی‌کند منطقی نیست (مگر اینکه در حال بازی کردن باشید). رسانه در پس زمینه، که در بخش بعدی مورد بحث قرار می گیرد).

وقتی فعالیت شما از سر گرفته می شود یا دوباره شروع می شود، البته باید یک MediaPlayer جدید ایجاد کنید و قبل از از سرگیری پخش دوباره آن را آماده کنید.

در اینجا نحوه انتشار و سپس لغو MediaPlayer آمده است:

کاتلین

mediaPlayer?.release()
mediaPlayer = null

جاوا

mediaPlayer.release();
mediaPlayer = null;

به عنوان مثال، مشکلاتی را در نظر بگیرید که اگر فراموش کنید MediaPlayer را با توقف فعالیت خود آزاد کنید، اما با شروع مجدد فعالیت، یک مدیا پلیر جدید ایجاد کنید. هنگامی که کاربر جهت صفحه نمایش را تغییر می دهد (یا پیکربندی دستگاه را به روش دیگری تغییر می دهد)، سیستم به طور پیش فرض فعالیت را مجدداً راه اندازی می کند. هنگامی که کاربر دستگاه را بین عمودی و منظره به جلو و عقب می چرخاند، ممکن است به سرعت تمام منابع سیستم را مصرف کنید، زیرا در هر تغییر جهت، یک MediaPlayer جدید ایجاد می کنید که هرگز آن را آزاد نمی کنید.

برای اطلاعات بیشتر در مورد راه اندازی مجدد زمان اجرا، به مدیریت تغییرات زمان اجرا مراجعه کنید.

ممکن است از خود بپرسید که اگر بخواهید حتی زمانی که کاربر فعالیت شما را ترک می‌کند، به پخش "رسانه پس‌زمینه" ادامه دهید، چه اتفاقی می‌افتد، دقیقاً به همان روشی که برنامه موسیقی داخلی رفتار می‌کند. در این مورد، آنچه شما نیاز دارید MediaPlayer است که توسط یک سرویس کنترل می شود، همانطور که در بخش بعدی بحث شد

بیشتر بدانید

Jetpack Media3 راه حل پیشنهادی برای پخش رسانه در برنامه شما است. در مورد آن بیشتر بخوانید .

این صفحات موضوعات مربوط به ضبط، ذخیره و پخش صدا و تصویر را پوشش می دهند: