Этот документ охватывает две области с потенциальными ловушками.
Состояние. При использовании «Medialayer» определенные операции допустимы только в определенных состояниях. Неправильные операции могут вызвать исключения или непредвиденное поведение.
Ресурсы При внесении изменений в конфигурацию, например повороте экрана, необходимо освободить объект
MediaPlayer
, чтобы освободить системные ресурсы и избежать их истощения.
Управление состоянием
MediaPlayer
основан на состоянии. То есть у него есть внутреннее состояние, о котором вы всегда должны помнить, когда пишете свой код, поскольку определенные операции действительны только тогда, когда игрок находится в определенных состояниях. Если вы выполняете операцию в неправильном состоянии, система может выдать исключение или вызвать другое нежелательное поведение.
Диаграмма состояний в документации класса MediaPlayer
поясняет, какие методы переводят MediaPlayer
из одного состояния в другое. Например:
- Когда вы создаете новый
MediaPlayer
, он находится в состоянии ожидания . - Вы инициализируете его, вызывая
setDataSource()
, который переводит его в состояние «Инициализировано» . - Вы подготавливаете его, используя метод
prepare()
илиprepareAsync()
. - Когда
MediaPlayer
завершает подготовку, он переходит в состояниеPrepared
, что означает, что вы можете вызватьstart()
чтобы воспроизвести медиафайл.
В этот момент, как показано на диаграмме, вы можете перемещаться между состояниями Started
, Paused
и PlaybackCompleted
вызывая, среди прочего, такие методы, как start()
, pause()
и seekTo()
.
Однако, когда вы вызываете stop()
, обратите внимание, что вы не можете снова вызвать 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
, он находится в состоянии ожидания . - Вы инициализируете его, вызывая
setDataSource()
, который переводит его в состояние «Инициализировано» . - Вы подготавливаете его, используя метод
prepare()
илиprepareAsync()
. - Когда
MediaPlayer
завершает подготовку, он переходит в состояниеPrepared
, что означает, что вы можете вызватьstart()
чтобы воспроизвести медиафайл.
В этот момент, как показано на диаграмме, вы можете перемещаться между состояниями Started
, Paused
и PlaybackCompleted
вызывая, среди прочего, такие методы, как start()
, pause()
и seekTo()
.
Однако, когда вы вызываете stop()
, обратите внимание, что вы не можете снова вызвать 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
, он находится в состоянии ожидания . - Вы инициализируете его, вызывая
setDataSource()
, который переводит его в состояние «Инициализировано» . - Вы подготавливаете его, используя метод
prepare()
илиprepareAsync()
. - Когда
MediaPlayer
завершает подготовку, он переходит в состояниеPrepared
, что означает, что вы можете вызватьstart()
чтобы воспроизвести медиафайл.
В этот момент, как показано на диаграмме, вы можете перемещаться между состояниями Started
, Paused
и PlaybackCompleted
вызывая, среди прочего, такие методы, как start()
, pause()
и seekTo()
.
Однако, когда вы вызываете stop()
, обратите внимание, что вы не можете снова вызвать 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
, он находится в состоянии ожидания . - Вы инициализируете его, вызывая
setDataSource()
, который переводит его в состояние «Инициализировано» . - Вы подготавливаете его, используя метод
prepare()
илиprepareAsync()
. - Когда
MediaPlayer
завершает подготовку, он переходит в состояниеPrepared
, что означает, что вы можете вызватьstart()
чтобы воспроизвести медиафайл.
В этот момент, как показано на диаграмме, вы можете перемещаться между состояниями Started
, Paused
и PlaybackCompleted
вызывая, среди прочего, такие методы, как start()
, pause()
и seekTo()
.
Однако, когда вы вызываете stop()
, обратите внимание, что вы не можете снова вызвать start()
пока не подготовите MediaPlayer
снова.
Всегда помните о диаграмме состояний при написании кода, взаимодействующего с объектом MediaPlayer
, поскольку вызов его методов из неправильного состояния является распространенной причиной ошибок.
Отпустите медиаплеер
MediaPlayer
может потреблять ценные системные ресурсы. Поэтому вам всегда следует принимать дополнительные меры предосторожности, чтобы не удерживать экземпляр MediaPlayer
дольше, чем необходимо. Когда вы закончите с этим, вам всегда следует вызывать release()
чтобы убедиться, что все выделенные для нее системные ресурсы освобождены правильно.
Например, если вы используете MediaPlayer
и ваша активность получает вызов onStop()
, вы должны освободить MediaPlayer
, потому что нет смысла удерживать его, пока ваша активность не взаимодействует с пользователем (если только вы не играете в СМИ на заднем плане, что обсуждается в следующем разделе).
Конечно, когда ваша деятельность возобновляется или перезапускается, вам необходимо создать новый MediaPlayer
и подготовить его снова, прежде чем возобновить воспроизведение.
Вот как вам следует освободить, а затем аннулировать ваш MediaPlayer
:
Котлин
mediaPlayer?.release()
mediaPlayer = null
Ява
mediaPlayer.release();
mediaPlayer = null;
В качестве примера рассмотрим проблемы, которые возникают, если вы забудете освободить MediaPlayer
при остановке вашей активности, но создадите новый, когда активность возобновится. Когда пользователь меняет ориентацию экрана (или меняет конфигурацию устройства другим способом), система перезапускает активность по умолчанию. Вы можете быстро использовать все системные ресурсы, когда пользователь поворачивает устройство вперед и назад между книжной и альбомной ориентацией, поскольку при каждом изменении ориентации вы создаете новый MediaPlayer
, который никогда не отпускаете.
Дополнительные сведения о перезапусках среды выполнения см. в разделе Обработка изменений среды выполнения .
Вам может быть интересно, что произойдет, если вы захотите продолжить воспроизведение «фонового мультимедиа», даже когда пользователь покидает вашу активность, во многом так же, как ведет себя встроенное приложение «Музыка». В этом случае вам нужен MediaPlayer
, управляемый службой, как описано в следующем разделе.
Узнать больше
Jetpack Media3 — рекомендуемое решение для воспроизведения мультимедиа в вашем приложении. Узнайте больше об этом.
На этих страницах рассматриваются темы, связанные с записью, хранением и воспроизведением аудио и видео: