#android #static
#Android #статический
Вопрос:
Я вижу во многих местах, что люди используют статический MediaPlayer
экземпляр, например, при использовании его во фрагменте или в действии. Я думаю, что одна из причин заключается в том, чтобы убедиться, что на протяжении всего жизненного цикла будет только один активный экземпляр, чтобы, когда им понадобится другой экземпляр, они могли освободить старый медиаплеер, выполнив что-то вроде
if (sMediaPlayer != null) {
sMediaPlayer.release()
}
sMediaPlayer = new MediaPlayer.create(...);
sMediaPlayer.setOnCompleteListener(__ -> {
sMediaPlayer.release();
sMediaPlayer = null;
}
Я прав? Кроме того, есть ли другие причины использования static
экземпляра MediaPlayer?
Спасибо
Комментарии:
1. Это может привести к утечке памяти. Вы можете использовать статический медиаплеер, если используете в том же контексте. Если вам нужно создать новый экземпляр, вы должны выпустить предыдущий экземпляр MediaPlayer
2. @Beyazid Я обновил исходный код. В основном этот код выполняется в статическом методе в сервисе, и я всегда освобождаю и аннулирую его после воспроизведения. Если я использую локальную переменную вместо static var, я не смогу освободить и аннулировать ее,
onCompleteListener
потому что экземпляр MediaPlayer должен бытьfinal
. Как я могу использовать его в статическом методе без использования статического var?3. Я думаю, что нет смысла использовать медиаплеер как статический в Activity / Fragment, оба имеют определенный жизненный цикл Android для инициализации и так далее, Чтобы иметь уникальный общий экземпляр MediaPlayer, его можно поместить в Service, ViewModel или в Singleton