این سند دو حوزه با مشکلات احتمالی را پوشش می دهد.
ایالت با "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 راه حل پیشنهادی برای پخش رسانه در برنامه شما است. در مورد آن بیشتر بخوانید .
این صفحات موضوعات مربوط به ضبط، ذخیره و پخش صدا و تصویر را پوشش می دهند: